Getting started¶
Let’s install small example Flask app:
my_app
├── app.py
└── my_api.py
cd my_app
python -m venv .venv
source .venv/bin/activate
pip install flask-marshmallow-openapi
my_api.py
:
import flask
import marshmallow as ma
from flask_marshmallow_openapi import open_api
api = flask.Blueprint("my_api", __name__)
class BookSchema(ma.Schema):
id = ma.fields.Integer(as_string=True)
title = ma.fields.String(allow_none=False)
publisher = ma.fields.String(allow_none=False)
isbn = ma.fields.String(allow_none=False)
@open_api.get_list(response_schema=BookSchema)
@api.route("/books", methods=["GET"])
def books_list():
return flask.jsonify(
BookSchema(many=True).dump(
[
{"id": 24, "title": "title", "publisher": "publisher", "isbn": "isbn"},
{"id": 42, "title": "title", "publisher": "publisher", "isbn": "isbn"},
]
)
)
app.py
:
from flask_marshmallow_openapi import OpenAPISettings, OpenAPI
import flask
from my_api import api
app = flask.Flask(__name__)
app.register_blueprint(api, url_prefix="/v1")
conf = OpenAPISettings(
api_version="v1", api_name="My API", app_package_name="my_api", mounted_at="/v1"
)
docs = OpenAPI(config=conf)
docs.init_app(app)
Check routes:
$ flask routes
Endpoint Methods Rule
--------------------- ------- -------------------------------
my_api.books_list GET /v1/books
open_api.re_doc GET /v1/docs/re_doc
open_api.static GET /v1/docs/static/<path:filename>
open_api.swagger_json GET /v1/docs/static/swagger.json
open_api.swagger_ui GET /v1/docs/swagger_ui
open_api.swagger_yaml GET /v1/docs/static/swagger.yaml
static GET /static/<path:filename>
Run the app:
flask run
And see the docs in local ReDoc:
Full example application¶
Many examples in this documentation had been collected into complete Flask application that demonstrates everything documented here.
Download: