如何为FastAPI Swagger自动生成的文档中的API方法创建自定义排序顺序?

6
如何为FastAPI Swagger autodocs中的API方法设置自定义排序顺序? 这个问题展示了如何在Java中实现。我的上一个问题问了如何按“方法”排序,这是一种支持的排序方法。我真的想更进一步,以便我可以确定方法出现的顺序。现在DELETE出现在顶部,但我希望API方法按以下顺序排列:GETPOSTPUTDELETE
我知道可以在JavaScript中实现自定义排序,并将该函数提供给operationsSorter,但是无法从Python绑定中可用的swagger_ui_parameters属性中包含它。有没有一种方法可以在Python中实现这个?
from fastapi import FastAPI

app = FastAPI(swagger_ui_parameters={"operationsSorter": "method"})

@app.get("/")
def list_all_components():
    pass

@app.get("/{component_id}")
def get_component(component_id: int):
    pass

@app.post("/")
def create_component():
    pass

@app.put("/{component_id}")
def update_component(component_id: int):
    pass

@app.delete("/{component_id}")
def delete_component(component_id: int):
    pass

enter image description here

1个回答

3
您可以使用tags对您的端点进行分组。为此,请将参数tags与包含一个str列表(通常只有一个str)的值传递给您的端点。对于使用相同的HTTP方法的端点,请使用相同的标签name,以便您可以这样对其进行分组。例如,使用Get作为GET操作的标签名称(注意:Get只是这里的一个示例,您可以使用任何标签name)。
仅执行上述操作很可能会按照您希望的顺序定义端点(即GETPOSTPUTDELETE)。但是,为了确保这一点——或者,即使您想为您的方法/标记定义不同的顺序,您也可以为用于分组端点的不同标记添加元数据。您可以使用参数openapi_tags来执行此操作,该参数接受包含每个标记的一个字典的列表。每个字典至少应包含name,该名称应为tags参数中使用的相同标签name每个标记元数据字典的顺序还定义了在文档UI中显示的顺序。 工作示例
from fastapi import FastAPI

tags_metadata = [
    {"name": "Get"},
    {"name": "Post"},
    {"name": "Put"},
    {"name": "Delete"}
]

app = FastAPI(openapi_tags=tags_metadata)

@app.get("/", tags=["Get"])
def list_all_components():
    pass

@app.get("/{component_id}", tags=["Get"])
def get_component(component_id: int):
    pass

@app.post("/", tags=["Post"])
def create_component():
    pass

@app.put("/{component_id}", tags=["Put"])
def update_component(component_id: int):
    pass

@app.delete("/{component_id}", tags=["Delete"])
def delete_component(component_id: int):
    pass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接