为 fastapi Web 应用程序尝试 api 版本控制
安装
pip install fastapi-versioning
示例
from fastapi import FastAPI
from fastapi_versioning import VersionedFastAPI, version
app = FastAPI(title="My App")
@app.get("/greet")
@version(1, 0)
def greet_with_hello():
return "Hello"
@app.get("/greet")
@version(1, 1)
def greet_with_hi():
return "Hi"
app = VersionedFastAPI(app)
这将生成两个端点:
/v1_0/greet
/v1_1/greet
还有:
/docs
/v1_0/docs
/v1_1/docs
/v1_0/openapi.json
/v1_1/openapi.json
还有可能添加一组额外的端点
重定向最新的 API 版本。为此,请提出论点
enable_latest真:
app = VersionedFastAPI(app, enable_latest=True)
这将生成以下附加端点:
/latest/greet
/latest/docs
/latest/openapi.json
在此示例中,/latest 端点将反映与 /v1.1 相同的数据。
试试看:
pip install pipenv
pipenv install --dev
pipenv run uvicorn example.annotation.app:app
# pipenv run uvicorn example.folder_name.app:app
使用无次要版本
from fastapi import FastAPI
from fastapi_versioning import VersionedFastAPI, version
app = FastAPI(title='My App')
@app.get('/greet')
@version(1)
def greet():
return 'Hello'
@app.get('/greet')
@version(2)
def greet():
return 'Hi'
app = VersionedFastAPI(app,
version_format='{major}',
prefix_format='/v{major}')
这将生成两个端点:
/v1/greet
/v2/greet
还有:
/docs
/v1/docs
/v2/docs
/v1/openapi.json
/v2/openapi.json
额外的 FastAPI 构造函数参数
请务必注意,只有原始 FastAPI 中的 title
提供给 VersionedAPI 应用程序。如果您有任何中间件,事件处理程序
等这些参数也需要提供给 VersionedAPI 函数
调用,如下例所示
from fastapi import FastAPI, Request
from fastapi_versioning import VersionedFastAPI, version
from starlette.middleware import Middleware
from starlette.middleware.sessions import SessionMiddleware
app = FastAPI(
title='My App',
description='Greet uses with a nice message',
middleware=[
Middleware(SessionMiddleware, secret_key='mysecretkey')
]
)
@app.get('/greet')
@version(1)
def greet(request: Request):
request.session['last_version_used'] = 1
return 'Hello'
@app.get('/greet')
@version(2)
def greet(request: Request):
request.session['last_version_used'] = 2
return 'Hi'
@app.get('/version')
def last_version(request: Request):
return f'Your last greeting was sent from version {request.session["last_version_used"]}'
app = VersionedFastAPI(app,
version_format='{major}',
prefix_format='/v{major}',
description='Greet users with a nice message',
middleware=[
Middleware(SessionMiddleware, secret_key='mysecretkey')
]
)