mirror of
https://github.com/kennethreitz/responder.git
synced 2026-06-05 23:00:17 +00:00
6f9c11645a
Also, refactor to `responder.ext.cli`.
105 lines
5.0 KiB
Markdown
105 lines
5.0 KiB
Markdown
# Responder: a familiar HTTP Service Framework for Python
|
|
|
|
[](https://github.com/kennethreitz/responder/actions/workflows/test.yaml)
|
|
[](https://github.com/kennethreitz/responder/actions/workflows/docs.yaml)
|
|
[](https://responder.kennethreitz.org/)
|
|
[](https://pypi.org/project/responder/)
|
|
[](https://pypi.org/project/responder/)
|
|
[](https://pypi.org/project/responder/)
|
|
[](https://pepy.tech/project/responder)
|
|
[](https://github.com/kennethreitz/responder/graphs/contributors)
|
|
[](https://pypi.org/project/responder/)
|
|
|
|
[](https://responder.readthedocs.io)
|
|
|
|
Powered by [Starlette](https://www.starlette.io/). That `async` declaration is optional.
|
|
[View documentation](https://responder.readthedocs.io).
|
|
|
|
This gets you a ASGI app, with a production static files server pre-installed, Jinja
|
|
templating (without additional imports), and a production webserver based on uvloop,
|
|
serving up requests with gzip compression automatically.
|
|
|
|
## Testimonials
|
|
|
|
> "Pleasantly very taken with python-responder.
|
|
> [@kennethreitz](https://x.com/kennethreitz42) at his absolute best." —Rudraksh
|
|
> M.K.
|
|
|
|
> "ASGI is going to enable all sorts of new high-performance web services. It's awesome
|
|
> to see Responder starting to take advantage of that." — Tom Christie author of
|
|
> [Django REST Framework](https://www.django-rest-framework.org/)
|
|
|
|
> "I love that you are exploring new patterns. Go go go!" — Danny Greenfield, author of
|
|
> [Two Scoops of Django](https://www.feldroy.com/two-scoops-press#two-scoops-of-django)
|
|
|
|
## More Examples
|
|
|
|
See
|
|
[the documentation's feature tour](https://responder.readthedocs.io/tour.html)
|
|
for more details on features available in Responder.
|
|
|
|
# Installing Responder
|
|
|
|
Install the most recent stable release:
|
|
|
|
pip install --upgrade 'responder'
|
|
|
|
Include support for all extensions and interfaces:
|
|
|
|
pip install --upgrade 'responder[full]'
|
|
|
|
Individual optional installation extras are:
|
|
|
|
- graphql: Adds GraphQL support via Graphene
|
|
- openapi: Adds OpenAPI/Swagger interface support
|
|
|
|
Install package with CLI and GraphQL support:
|
|
|
|
uv pip install --upgrade 'responder[cli,graphql]'
|
|
|
|
Alternatively, install directly from the repository:
|
|
|
|
pip install 'responder[full] @ git+https://github.com/kennethreitz/responder.git'
|
|
|
|
Responder supports **Python 3.6+**.
|
|
|
|
# The Basic Idea
|
|
|
|
The primary concept here is to bring the niceties that are brought forth from both Flask
|
|
and Falcon and unify them into a single framework, along with some new ideas I have. I
|
|
also wanted to take some of the API primitives that are instilled in the Requests
|
|
library and put them into a web framework. So, you'll find a lot of parallels here with
|
|
Requests.
|
|
|
|
- Setting `resp.content` sends back bytes.
|
|
- Setting `resp.text` sends back unicode, while setting `resp.html` sends back HTML.
|
|
- Setting `resp.media` sends back JSON/YAML (`.text`/`.html`/`.content` override this).
|
|
- Case-insensitive `req.headers` dict (from Requests directly).
|
|
- `resp.status_code`, `req.method`, `req.url`, and other familiar friends.
|
|
|
|
## Ideas
|
|
|
|
- Flask-style route expression, with new capabilities -- all while using Python 3.6+'s
|
|
new f-string syntax.
|
|
- I love Falcon's "every request and response is passed into to each view and mutated"
|
|
methodology, especially `response.media`, and have used it here. In addition to
|
|
supporting JSON, I have decided to support YAML as well, as Kubernetes is slowly
|
|
taking over the world, and it uses YAML for all the things. Content-negotiation and
|
|
all that.
|
|
- **A built in testing client that uses the actual Requests you know and love**.
|
|
- The ability to mount other WSGI apps easily.
|
|
- Automatic gzipped-responses.
|
|
- In addition to Falcon's `on_get`, `on_post`, etc methods, Responder features an
|
|
`on_request` method, which gets called on every type of request, much like Requests.
|
|
- A production static file server is built-in.
|
|
- Uvicorn built-in as a production web server. I would have chosen Gunicorn, but it
|
|
doesn't run on Windows. Plus, Uvicorn serves well to protect against slowloris
|
|
attacks, making nginx unnecessary in production.
|
|
- GraphQL support, via Graphene. The goal here is to have any GraphQL query exposable at
|
|
any route, magically.
|
|
- Provide an official way to run webpack.
|
|
|
|
## Development
|
|
|
|
See [Development Sandbox](https://responder.kennethreitz.org/sandbox.html).
|