https://github.com/community-of-python/fast-version
Versioning APIs in FastAPI by Accept-header
https://github.com/community-of-python/fast-version
accept-header fastapi rest versioning
Last synced: about 1 month ago
JSON representation
Versioning APIs in FastAPI by Accept-header
- Host: GitHub
- URL: https://github.com/community-of-python/fast-version
- Owner: community-of-python
- License: mit
- Created: 2023-09-07T18:52:26.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-22T13:06:35.000Z (9 months ago)
- Last Synced: 2025-06-29T02:51:26.077Z (7 months ago)
- Topics: accept-header, fastapi, rest, versioning
- Language: Python
- Homepage:
- Size: 207 KB
- Stars: 13
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
FastAPI versioning library
==
[](https://codecov.io/gh/community-of-python/fast-version)
[](https://mypy.readthedocs.io/en/stable/getting_started.html#strict-mode-and-configuration)
[](https://pypi.python.org/pypi/fast-version)
[](https://pypistats.org/packages/fast-version)
[](https://github.com/community-of-python/fast-version/stargazers)

This package adds versioning by Accept-header into FastAPI
## Quickstart:
### Installation
```shell
$ pip install fast-version
```
### Defining app and routes
```python
import fastapi
from fast_version import VersionedAPIRouter, init_fastapi_versioning
VERSION_HEADER: str = "application/vnd.some.name+json"
ROUTER_OBJ = VersionedAPIRouter()
@ROUTER_OBJ.get("/test/")
async def test_get() -> dict:
return {"version": (1, 0)}
@ROUTER_OBJ.get("/test/")
@ROUTER_OBJ.set_api_version((2, 0))
async def test_get_v2() -> dict:
return {"version": (2, 0)}
app = fastapi.FastAPI()
app.include_router(ROUTER_OBJ)
init_fastapi_versioning(app=app, vendor_media_type=VERSION_HEADER)
```
### Query Examples
```bash
# call 1.0 version
curl -X 'GET' 'https://test.ru/test/' -H 'accept: application/vnd.some.name+json; version=1.0'
curl -X 'GET' 'https://test.ru/test/' -H 'accept: application/vnd.some.name+json'
curl -X 'GET' 'https://test.ru/test/'
# call 2.0 version
curl -X 'GET' 'https://test.ru/test/' -H 'accept: application/vnd.some.name+json; version=2.0'
```