http - 如何设置快速 API 版本以允许 HTTP 可以在接受 header 中指定版本?

标签 http fastapi api-versioning

我正在处理一个需要我对快速 API 端点进行版本控制的项目。我们希望通过 HTTP 接受 header 对端点进行版本控制,例如headers={'Accept': 'application/json;version=1.0.1'}, headers={'Accept': 'application/json;version=1.0.2'}。只设置这样的api版本似乎行不通:

app = FastAPI(
        version=version,
        title="A title",
        description="Some description.",
    )

有人知道我还需要做什么吗?

最佳答案

也许路径 url 中的版本会更好

sub apps docs

from fastapi import FastAPI

app = FastAPI()
v1 = FastAPI()

@v1.get("/app/")
def read_main():
    return {"message": "Hello World from api v1"}

v2 = FastAPI()

@v2.get("/app/")
def read_sub():
    return {"message": "Hello World from  api v2"}

app.mount("/api/v1", v1)
app.mount("/api/v2", v2)

您将看到每个应用的自动文档

localhost:8000/api/v1/docs

本地主机:8000/api/v2/docs

但是你总是在请求中得到标题

from starlette.requests import Request

from fastapi import FastAPI
app = FastAPI()

@app.post("/hyper_mega_fast_service")
def fast_service(request: Request, ):

    aceept = request.headers.get('Accept')

    value = great_fuction_to_get_version_from_header(aceept)
    if value == '1.0.1': 
        "Do something"
        
    if value == '1.0.2': 
        "Do something"

关于http - 如何设置快速 API 版本以允许 HTTP 可以在接受 header 中指定版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66390509/

相关文章:

rest - 使用 HATEOAS 对耦合的 RESTful API 进行版本控制

http - 以 RESTful 方式对网页用户进行身份验证的首选方法是什么?

java - HttpResponse 中的状态代码错误

gunicorn - 在 ubuntu 服务器上使用 uvicorn 运行 fastapi 应用程序

javascript - 在本地主机中获取 FastApi 的 JavaScript

asp.net - API 版本控制和在版本更新上重用现有实现

asp.net-core - MVC 6 中使用 Action 约束时使用 Swagger 的多个 Api 版本

java - 同时获取多个 HTML 页面的有效方法

.net - 使用 HttpListener 时如何确保 http 请求是本地的

python - body 是什么? `from fastapi import Body`