Metadata-Version: 2.4
Name: fast-version
Version: 1.4.7
Summary: Versioning APIs in FastAPI by Accept-header
Keywords: accept-header,api-versioning,fastapi,openapi,python,rest,versioning
Author: Artur Shiriev
Author-email: Artur Shiriev <me@shiriev.ru>
License-Expression: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: fastapi>=0.100
Requires-Python: >=3.10, <4
Project-URL: Homepage, https://github.com/community-of-python/fast-version
Project-URL: Repository, https://github.com/community-of-python/fast-version
Project-URL: Issues, https://github.com/community-of-python/fast-version/issues
Project-URL: Changelog, https://github.com/community-of-python/fast-version/releases
Description-Content-Type: text/markdown

FastAPI versioning library
==
[![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](https://github.com/community-of-python/fast-version/actions/workflows/ci.yml)
[![Supported versions](https://img.shields.io/pypi/pyversions/fast-version.svg)](https://pypi.python.org/pypi/fast-version)
[![downloads](https://img.shields.io/pypi/dm/fast-version.svg)](https://pypistats.org/packages/fast-version)
[![GitHub stars](https://img.shields.io/github/stars/community-of-python/fast-version)](https://github.com/community-of-python/fast-version/stargazers)

<img src="./logo.svg" width="250" />

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'
```
