Comments (6)
@jrycw Thanks. Let's leave the middleware as it is for now then, and we can always revisit it in the future 👍
from piccolo_api.
You're right - the middleware in Piccolo API is a mix of different styles.
The way I remember it, is async def __call__(self, scope, receive, send)
is a 'pure' ASGI middleware. If you look at the ASGI spec itself, this is how it expects middleware to behave.
The middleware which uses async def dispatch(self, request, call_next)
is based off Starlette's BaseHTTPMiddleware
, which adds a level of abstraction, so you deal with a request object, which arguably is simpler.
I'm not sure which is generally preferred nowadays - I imagine that both will work for the foreseeable future. Which one do you think is best?
from piccolo_api.
Both options seem excellent. The determining factor may depend on package dependencies. For example, I've heard that litestar
originally relied on starlette
, but that may no longer be the case.
from piccolo_api.
Yeah, litestar no longer has starlette as a dependency. We sometimes found it problematic in the past, because litestar and fastapi would require conflicting versions of starlette.
piccolo_api
has fastapi as a dependency, which could possibly be changed to an optional dependency.
I was thinking about the different styles of middleware that Piccolo API uses recently, but can't remember what I decided.
@sinisaos Do you have any thoughts on the different styles of middleware?
from piccolo_api.
Yeah, litestar no longer has starlette as a dependency. We sometimes found it problematic in the past, because litestar and fastapi would require conflicting versions of starlette.
Starlette
is not Litestar
dependency for a long time (I think from version 1.50 or something like that).
piccolo_api
has fastapi as a dependency, which could possibly be changed to an optional dependency.
I think we will have a hard time putting FastAPI
as an optional dependency without major code interventions, because we need FastAPI
for FastAPIWrapper
which is the base for Piccolo Admin. I think we should stick with FastAPI
as the most popular and used ASGI framework. Other options (but not nearly as popular) are BlackSheep
(which has been slower to maintaince lately) or Litestar
(I've even made some contributions, but I'm kind of having a hard time reading Litestar's source code). I think FastAPI
is still the best option for something like FastAPIWrapper
.
Both variants are equally good, but I find the middleware based on Starlette BaseHTTPMiddleware
a bit cleaner and clearer (atleast for me).
from piccolo_api.
I'll proceed with closing this issue since it seems there's no more input. Thank you, @dantownsend and @sinisaos , for your participation!
from piccolo_api.
Related Issues (20)
- TypeError: __init__() got an unexpected keyword argument 'excluded_paths' HOT 5
- Feature to modify body and query_parameters in `PiccoloCRUD` HOT 8
- Fix code scanning alert - Unused global variable
- Batch version of the get endpoint HOT 6
- Drop Python 3.7 support
- Catch foreign key constraint errors in `PiccoloCRUD`
- `schema_extra` param not passed to `pydantic_model_{output | optional | plural}` methods HOT 1
- Piccolo Admin API docs are not rendering
- Better error display on PATCH request
- Alpha version for Pydantic 2.0 / Piccolo 1.0a1? HOT 2
- PiccoloCRUD `post_single` return id of the inserted row instead of the row HOT 3
- Add `ne` operator
- Python 3.12 support
- RateLimitingMiddleware tests failed HOT 5
- Stop multi-dimensional arrays from breaking
- Issue with updating and bulk updating `BaseUser` via admin panel HOT 15
- Make `default-src` configurable in `CSPMiddleware`
- Hide parameter in Validators to hide Piccolo Admin table link from sidebar if the validators fail. HOT 8
- Add `excluded_paths` to `SessionsAuthBackend`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from piccolo_api.