GithubHelp home page GithubHelp logo

Updating middleware syntax about piccolo_api HOT 6 CLOSED

jrycw avatar jrycw commented on June 11, 2024
Updating middleware syntax

from piccolo_api.

Comments (6)

dantownsend avatar dantownsend commented on June 11, 2024 2

@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.

dantownsend avatar dantownsend commented on June 11, 2024

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.

jrycw avatar jrycw commented on June 11, 2024

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.

dantownsend avatar dantownsend commented on June 11, 2024

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.

sinisaos avatar sinisaos commented on June 11, 2024

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.

jrycw avatar jrycw commented on June 11, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.