Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.
Project description
Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.
Features
Request and Response Validation - Flask-Rebar relies on schemas from the popular Marshmallow package to validate incoming requests and marshal outgoing responses.
Automatic Swagger Generation - The same schemas used for validation and marshaling are used to automatically generate OpenAPI specifications (a.k.a. Swagger). This also means automatic documentation via Swagger UI.
Error Handling - Uncaught exceptions from Flask-Rebar are converted to appropriate HTTP errors.
Example
from flask import Flask
from flask_rebar import errors, Rebar
from marshmallow import fields, Schema
from my_app import database
rebar = Rebar()
# All handler URL rules will be prefixed by '/v1'
registry = rebar.create_handler_registry(prefix='/v1')
class TodoSchema(Schema):
id = fields.Integer()
complete = fields.Boolean()
description = fields.String()
# This schema will validate the incoming request's query string
class GetTodosQueryStringSchema(Schema):
complete = fields.Boolean()
# This schema will marshal the outgoing response
class GetTodosResponseSchema(Schema):
data = fields.Nested(TodoSchema, many=True)
@registry.handles(
rule='/todos',
method='GET',
query_string_schema=GetTodosQueryStringSchema(),
response_body_schema=GetTodosResponseSchema(), # for versions <= 1.7.0, use marshal_schema
)
def get_todos():
"""
This docstring will be rendered as the operation's description in
the auto-generated OpenAPI specification.
"""
# The query string has already been validated by `query_string_schema`
complete = rebar.validated_args.get('complete')
...
# Errors are converted to appropriate HTTP errors
raise errors.Forbidden()
...
# The response will be marshaled by `marshal_schema`
return {'data': []}
def create_app(name):
app = Flask(name)
rebar.init_app(app)
return app
if __name__ == '__main__':
create_app(__name__).run()
For a more complete example, check out the example app at examples/todo.py. Some example requests to this example app can be found at examples/todo_output.md.
Installation
pip install flask-rebar
Replacing static swagger-ui files
If you’d like to replace swagger-ui’s static files (flask_rebar/swagger_ui/static) with those of the latest release, run the following from the root of the project.
curl -L https://api.github.com/repos/swagger-api/swagger-ui/tarball | tar -xv --directory=flask_rebar/swagger_ui/static --strip-components=2 "*/dist/"
Documentation
More extensive documentation can be found here.
Extensions
Flask-Rebar is extensible! Here are some open source extensions:
Flask-Rebar-Auth0 - Auth0 authenticator for Flask-Rebar
Contributing
There is still work to be done, and contributions are encouraged! Check out the contribution guide for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file flask_rebar-3.3.2.tar.gz
.
File metadata
- Download URL: flask_rebar-3.3.2.tar.gz
- Upload date:
- Size: 3.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5f4fe890d7b91780fbae52c62c2cf6a9f2869cf1d23fbf32a8335393c980cab |
|
MD5 | 73957d8ad184f29d6da4c7c801df64c7 |
|
BLAKE2b-256 | fb6b0ed6e48d50db99f82b4d03c5e41c19837c074edd9ce08794e1e1aa46266d |
File details
Details for the file flask_rebar-3.3.2-py2.py3-none-any.whl
.
File metadata
- Download URL: flask_rebar-3.3.2-py2.py3-none-any.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4dae1d12088fae73ef9b4293a69805a71d8c97197413887e24beb0c3d4edee20 |
|
MD5 | a22944adce8fd1643fe64ae25b6f4eca |
|
BLAKE2b-256 | 20d0ce3623f6026969887ef66acb59612678d55493560258269327b40d430570 |