FlaskDoc allows developers to programmatically compose openapi specifications for flask endpoints as a part of code without needing to write a separate yaml file, and it comes with SwaggerUI embedded. Its main focus is on documentation which frees developers to focus on getting their services coded.
- Focus only on documentation and not introduce some fancy new way of using flask.
- Easily add to existing code without needing to refactor of change the way the code has been written
- Little or no learning curve, as long as a developer is comforatble using flask developers, they can use flaskdoc. to learn quickly and not distract So developers focus on writing code
- SwaggerUI integration for quickly testing and iterating through versions
- Automatic data model to JSON Schema transformation that allows for finer grain configuration
Visit documentation page for more details.
from pypi
$ pip install flaskdoc
from github
$ pip install https://github.com/kulgan/flaskdoc/tarball/master
To run examples you will need to install the dev extension
$ pip install flaskdoc[dev]
Add top level openapi objects like Info, Contact, License etc
import flask
from flaskdoc import register_openapi, swagger
app = flask.Flask()
# initialize app, add all the blueprints you care about
# Create top level OpenAPI objects
# the info object
info = swagger.Info(
title="Test",
version="1.2.2",
contact=swagger.Contact(
name="Rowland", email="[email protected]", url="https://github.com/kulgan"
),
license=swagger.License(name="Apache 2.0", url="https://www.example.com/license"),
)
# servers names and variables if necessary
servers = [swagger.Server(url="http://localhost:15172")]
# top level tags
tags = [
swagger.Tag(name="admin", description="Secured Admin-Only calls"),
swagger.Tag(name="developers", description="Operations available to regular developers"),
]
security_schemes = {
"api_key": swagger.ApiKeySecurityScheme(name="api_key"),
}
# register spec
register_openapi(app, info=info, servers=servers, tags=tags, security=security_schemes)
This adds the following endpoints to your list
- /docs
- /docs/openapi.yaml
- /docs/openapi.json
Now start documenting you flask routes
A simple post example
blp = flask.Blueprint("Dummy", __name__, url_prefix="/v1")
@swagger.POST(
tags=["administrator"],
description="Posts an Echo",
responses={"201": swagger.ResponseObject(description="OK")},
)
@blp.route("/echo", methods=["POST"])
def post():
req = flask.request.get_json(force=True)
return flask.jsonify(req), 200
A GET example with path parameter
blp = flask.Blueprint("Dummy", __name__, url_prefix="/v1")
@swagger.GET(
tags=["getEcho"],
operation_id="getEcho",
parameters=[swagger.PathParameter(name="sample", schema=str)],
description="Retrieve echos wit Get",
responses={
"200": swagger.ResponseObject(
description="Success", content=jo.PlainText(schema=jo.Email()),
)
},
)
@blp.route("/echo/<string:sample>", methods=["GET"])
def echo(sample: str):
"""
Sample GET request
Returns: Echos back whatever was sent
"""
return sample
Run your app and visit /docs to see the generated openapi specs
Two example projects are currently provided
- inventory
- petstore source OpenAPI Petstore
- link-example - source OpenAPI link example
- api-with-example - source OpenAPI api_with_examples
To run
$ pip install flaskdoc[dev]
$ flaskdoc start -n petstore
Don't hesitate to create a Github issue for any bugs or suggestions