alexschimpf / fastapi-versionizer

FastAPI Versionizer
MIT License
81 stars 13 forks source link

Missing example for this case #51

Open lcsvcn opened 8 months ago

lcsvcn commented 8 months ago

How to use in this format:

router = APIRouter()

router.get("/users")(get_users)

def get_users():
      # function logic here

Looked up all examples and could not find...

alexschimpf commented 7 months ago

This should work...

from typing import List, Any, Dict
from fastapi import FastAPI, APIRouter
from pydantic import BaseModel

from fastapi_versionizer.versionizer import Versionizer, api_version

app = FastAPI(
    title='test',
    docs_url='/swagger',
    openapi_url='/api_schema.json',
    redoc_url=None,
    description='Simple example of FastAPI Versionizer.',
    terms_of_service='https://github.com/alexschimpf/fastapi-versionizer'
)
items_router = APIRouter(
    prefix='/items',
    tags=['Items']
)

@api_version(1)
def get_items_v1() -> str:
    return 'v1'

@api_version(2)
def get_items_v2() -> str:
    return 'v2'

items_router.get('', deprecated=True)(get_items_v1)
items_router.get('')(get_items_v2)
app.include_router(items_router)

versions = Versionizer(
    app=app,
    prefix_format='/v{major}',
    semantic_version_format='{major}',
    latest_prefix='/latest',
    include_versions_route=True,
    sort_routes=True
).versionize()