This was inspired by fastapi_versioning.
This project fixes some of the issues with fastapi_versioning
and adds some additional features.
pip install fastapi-versionizer
You can find examples in the examples directory.
- Routes can be annotated using the
@api_version
decorator- This essentially says, "This route is available from version (major, minor) onward, until a new version of the route is defined."
- Routes can be annotated using the
@api_version_remove
decorator- This essentially says, "This route is removed from version (major, minor) onward, until a new version of the route is defined again."
- Use the
versionize
function on your FastAPI app to perform the versionizing magic- Each version results in a new mounted FastAPI sub-application with a version prefix you define
- Unlike
fastapi_versioning
, this does not return a new FastAPI app, but applies the versioning directly to the app you provide - You can generate a "latest" alias for the latest version using
enable_latest
andlatest_prefix
- You can customize your OpenAPI schemas at runtime using
get_openapi
- This will be used to override the
openapi
function of all versioned FastAPI sub-applications
- This will be used to override the
- You can generate each versioned Swagger page using
get_docs
anddocs_url
- This is useful if you need to want to customize your Swagger HTML using
fastapi.openapi.docs.get_swagger_ui_html
- See the Advanced Example for more details
- This is useful if you need to want to customize your Swagger HTML using
- You can generate each versioned Redoc page using
get_redoc
andredoc_url
- This is useful if you need to want to customize your Redoc HTML using
fastapi.openapi.docs.get_redoc_html
- The usage of this is very similar to
get_docs
- This is useful if you need to want to customize your Redoc HTML using
- You can sort the routes within a version to occur by route-path-name using
sorted_routes
see the Sorted Example for more details. - You can pass additional
kwargs
that will be supplied to each versioned sub-application- Note:
app.title
andapp.description
are automatically supplied to each versioned sub-application - For all other FastAPI parameters, these must be passed via
kwargs
- If you want a custom title and description for each versioned docs page, you can use
get_docs
and/orget_redoc
- Note: If you want docs pages to be generated, you must pass either
docs_url
orredoc_url
as kwargs - Note: If you want to specify custom
responses
, these must be defined on your FastAPI app (not viakwargs
)- See the Advanced Example for more details
- Note: