Skip to main content

Generate REST API and OpenAPI documentation for your Flask project.

Project description

Generate REST API and OpenAPI documentation for your Flask project.

test pypi pypistats pypi versions

This branch is in development preview state.

Flask OpenAPI3 is a web API framework based on Flask. It uses Pydantic to verify data and automatic generation of interaction documentation: Swagger, ReDoc, RapiDoc, etc.

The key features are:

  • Easy to code: Easy to use and easy to learn

  • Standard document specification: Based on OpenAPI Specification

  • Interactive OpenAPI documentation: Swagger, Redoc, RapiDoc, etc.

  • Data validation: Fast data verification based on Pydantic

  • Authorization: Support to reload authorizations in Swagger UI

Requirements

Python 3.8+

flask-openapi3 is dependent on the following libraries:

Installation

pip install -U flask-openapi3[swagger]

or

conda install -c conda-forge flask-openapi3[swagger]
Optional dependencies

To install these dependencies with flask-openapi3:

pip install flask-openapi3[yaml]
# or
pip install flask-openapi3[async]
# or
pip install flask-openapi3[dotenv]
# or
pip install flask-openapi3[email]
# or all
pip install flask-openapi3[yaml,async,dotenv,email]
# or manually
pip install pyyaml asgiref python-dotenv email-validator

A Simple Example

Here's a simple example, further go to the Example.

from pydantic import BaseModel

from flask_openapi3 import Info, Tag
from flask_openapi3 import OpenAPI

info = Info(title="book API", version="1.0.0")
app = OpenAPI(__name__, info=info)

book_tag = Tag(name="book", description="Some Book")


class BookQuery(BaseModel):
    age: int
    author: str


@app.get("/book", summary="get books", tags=[book_tag])
def get_book(query: BookQuery):
    """
    to get all books
    """
    return {
        "code": 0,
        "message": "ok",
        "data": [
            {"bid": 1, "age": query.age, "author": query.author},
            {"bid": 2, "age": query.age, "author": query.author}
        ]
    }


if __name__ == "__main__":
    app.run(debug=True)
Class-based API View Example
from typing import Optional

from pydantic import BaseModel, Field

from flask_openapi3 import OpenAPI, Tag, Info, APIView


info = Info(title='book API', version='1.0.0')
app = OpenAPI(__name__, info=info)

api_view = APIView(url_prefix="/api/v1", view_tags=[Tag(name="book")])


class BookPath(BaseModel):
    id: int = Field(..., description="book ID")


class BookQuery(BaseModel):
    age: Optional[int] = Field(None, description='Age')


class BookBody(BaseModel):
    age: Optional[int] = Field(..., ge=2, le=4, description='Age')
    author: str = Field(None, min_length=2, max_length=4, description='Author')


@api_view.route("/book")
class BookListAPIView:
    a = 1

    @api_view.doc(summary="get book list")
    def get(self, query: BookQuery):
        print(self.a)
        return query.model_dump_json()

    @api_view.doc(summary="create book")
    def post(self, body: BookBody):
        """description for a created book"""
        return body.model_dump_json()


@api_view.route("/book/<id>")
class BookAPIView:
    @api_view.doc(summary="get book")
    def get(self, path: BookPath):
        print(path)
        return "get"

    @api_view.doc(summary="update book")
    def put(self, path: BookPath):
        print(path)
        return "put"

    @api_view.doc(summary="delete book", deprecated=True)
    def delete(self, path: BookPath):
        print(path)
        return "delete"


app.register_api_view(api_view)

if __name__ == "__main__":
    app.run(debug=True)

API Document

Run the simple example, and go to http://127.0.0.1:5000/openapi.

You will see the documentation: Swagger, Redoc and RapiDoc.

Swagger, Redoc, RapiDoc are optional dependencies that require manual installation.

pip install -U flask-openapi3[swagger,redoc,rapidoc]

More optional ui templates goto the document about UI_Templates.

openapi openapi-swagger openapi-redoc openapi-RapiDoc

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_openapi3-4.0.0.dev0.tar.gz (47.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_openapi3-4.0.0.dev0-py3-none-any.whl (47.1 kB view details)

Uploaded Python 3

File details

Details for the file flask_openapi3-4.0.0.dev0.tar.gz.

File metadata

  • Download URL: flask_openapi3-4.0.0.dev0.tar.gz
  • Upload date:
  • Size: 47.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.10

File hashes

Hashes for flask_openapi3-4.0.0.dev0.tar.gz
Algorithm Hash digest
SHA256 3e9518bb784bb4e32d3e42add25b73ec8f3ad13bc8892eb50391ca5d162498ec
MD5 a4a4ab6d553efa67bf91673dc3fdf211
BLAKE2b-256 12216dae54a60b5d4fafd4036a02796de7919a1306a0e1742dd047f837ab69bf

See more details on using hashes here.

File details

Details for the file flask_openapi3-4.0.0.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_openapi3-4.0.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 e85b2e65ef1b053f9e4d21af31b79bc97b8db226d7f3520b47ce7b88d555fb8f
MD5 736953f7cec0ec05ce6793c58f7be02b
BLAKE2b-256 51c09a061328cecbe5ce2ec775519ba37d8d87b3a5e0670f8f33fe5e8f6bf4ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page