(2023.06.08 Thur @KLN HK)
FastAPI构建API/endpoint过程中建议使用pydantic包实现data validation,同时建议使用python enum实现元素枚举。
在endpoint中添加example
实现这一endpoint需要若干步骤
- 预先定义Response Model和Request Model,以及需要在endpoint中展示的filter example
- 在入口函数的API/endpoint中添加response&request model
(2023.06.11 Sun @SZ 颖隆大厦)
具体案例如下:
在models.py
中通过pydantic的BaseModel定义Request Model和Response Model,以及filter example.
# models.py
from pydantic import BaseModel
from datetime import datetime
class RequestModel(BaseModel):
start_: str
end_: str
ids: list[str] = []
cons = 100
class ResponseModel(BaseModel):
res_count: int = 0
res1: list[dict] = []
res2: list[dict] = []
filter_examples = {
"example1": {
"summary": "example 1 - demo 1",
"description": "this is a description",
"value": {
"start_": "value1",
"end_": "value2",
"ids": ["value3"]
},
}
}
在FastAPI的入口文件main-api.py
中代码如下
# main-api.py
from fastapi import FastAPI, Query, Body
from models import RequestModel, ResponseModel, filter_examples
from fastapi.openapi.docs import get_swagger_ui_html
app = FastAPI()
@app.post("/endpoint1/", tags=["show-examples"], response_model=ResponseModel)
async def func_ep1(requests_model: RequestModel=Body(examples=filter_examples)):
res = {'res_count': requests_model.cons, 'res1': [{"start_": requests_model.start_}],
'res2': [{"end_": requests_model.end_}]}
return res
@app.get("/docs")
def read_docs():
return get_swagger_ui_html(openapi_url="/openapi.json")
其中的@app.get("/docs")
部分设定swagger UI。
在endpoint1
的函数中定义requests_model
,并将其中的值传递给返回结果。
在endpoint中加入下拉列表
需要使用fastapi中的Query
方法。
在models.py
文件中加入Enum对象,给出下拉列表的元素。
# models.py
from enum import Enum
class someClassEnum(str, Enum):
field_a = "a"
field_b = "b"
field_c = "c"
在入口文件中加入对应的endpoint
# main-api.py
from fastapi import FastAPI, Query, Body
from models import someClassEnum
app = FastAPI()
@app.get("/endpoint2", tags=["dropdown-list"])
async def func_ep2(data_field: someClassEnum = Query(someClassEnum.field_a)) -> dict:
return {"req_name": data_field.name, "req_value": data_field.value}
返回结果中有下拉列表
dropdown list in FastAPI
网友评论