Comments (2)
I don't think we need to put too much focus on it, early on.
Sure. To me it's super important, because it's potentially the difference between "let's design monolithic frameworks that have to completely own the space to succeed" vs. "let's build a better ecosystem, throughout".
I think ASGI has a tremendous opportunity here to build a more collaborative ecosystem, and establish patterns whereby high-level frameworks are composed of nicely isolated units.
For example, if responder designs it's request and response models like so...
class Request:
def __init__(self, scope, receive):
...
class Response
def __init__(self, scope):
...
async def __call__(self, receive, send):
...
Then they become nicely reusable in any ASGI app. You can drop all the way down to writing a simple "hello, world" ASGI application, without any of the rest of responder, but using a Responder
request and/or response classes, and automatically getting it's content negotiated behavior etc.. as a result.
from responder.models import Request, Response
# I'm a standard ASGI app, you can run me directly with `daphne`, `uvicorn`, or `hypercorn`.
# You can test me with any standard ASGI TestClient.
# You can wrap me in middleware, or dispatch to me from any ASGI framework's routing.
class HelloWorld:
def __init__(self, scope):
self.scope = scope
async def __call__(self, receive, send):
request = Request(self.scope, receive)
response = Response(self.scope)
... # Do stuff
await response(receive, send)
Working at those lower levels of abstraction isn't necessarily what most of us would be doing day-to-day, most of the time, but being able to is super important, and breaks down the "I need to understand how the complete framework functions in order to understand one of it's components"
I think it's important to start thinking about at least reasonably early on, otherwise you start introducing points of coupling that later become entrenched.
(I'll park these thoughts for now)
from responder.
I like this as a goal, but I don't think we need to put too much focus on it, early on.
from responder.
Related Issues (20)
- Docs: being more explicit about why to use api.background.task HOT 2
- Add documentation for response streaming
- Stop stream response if client disconnects HOT 1
- [Feature Request] OpenAPI Schema Support with Pydantic
- Potential code quality improvements HOT 7
- MultiRelay not working - Blank screen
- Run with workers argument doesn't work
- api.jinja_values_base removed? HOT 2
- AttributeError: module 'typesystem' has no attribute 'SchemaDefinitions' HOT 2
- Fail to install: Python 3.9 HOT 5
- AttributeError: 'str' object has no attribute 'decode'
- Missing uvloop on default setup HOT 3
- Static file changes require server restart
- [Feature Request] - request context middleware like starlette-context
- AttributeError: module 'typesystem' has no attribute 'SchemaDefinitions': incompatibility with typesystem v0.3.0 HOT 1
- Uvicorn version too old ?
- doc website 404 HOT 1
- Vulnerability in referenced starlette version
- Can't install on Debian bookworm with python 3. HOT 2
- New release pending? / Python >= 3.11 need a compiler when installing HOT 3
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 responder.