FastAPI允许OpenAPI规范中的特定参数值(Swagger UI)

1qczuiv0  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(204)

我正在阅读有关路径参数验证的教程:https://fastapi.tiangolo.com/tutorial/path-params/
我想允许字符串“a”、“B”和“c”作为可能的参数值。我想让这些值显示在OpenAPI文档(FastAPI automatic docs)中,这样API用户就不必猜测它们了。我如何才能让这些值显示在文档中?
下面是我的实现:

from fastapi import FastAPI, HTTPException

app = FastAPI()

parameters = ["a", "b", "c"]

@app.get("/endpoint/{parameter}")
def endpoint(parameter: str):
    if parameter not in parameters:
        raise HTTPException(status_code=400, detail="parameter must be a, b, or c")
    return {"parameter": parameter}
ni65a41a

ni65a41a1#

使用Enum进行参数验证,允许的值将出现在文档站点中。

from enum import Enum

from fastapi import FastAPI, HTTPException

app = FastAPI()

class AllowedParameterValues(str, Enum):
    a = "a"
    b = "b"
    c = "c"

@app.get("/endpoint/{parameter}")
def endpoint(parameter: AllowedParameterValues):
    return {"parameter": parameter}
vfwfrxfs

vfwfrxfs2#

选项1

创建一个Enum类,如FastAPI文档中所述:

from enum import Enum

class MyParam(str, Enum):
    a= "a"
    b= "b"
    c= "c"

@app.get("/{my_param}")
def index(my_param: MyParam):
    return {"my_param": my_param}

选项2

使用Literal类型,该类型允许您指定参数只能接受特定的文本值:

from typing import Literal

@app.get("/{my_param}")
def index(my_param: Literal["a", "b", "c"]):
    return {"my_param": my_param}

相关问题