你可以使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量":
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
路径参数 item_id
的值将作为参数 item_id
传递给你的函数。
所以,如果你运行示例并访问 http://127.0.0.1:8000/items/foo,将会看到如下响应:
{"item_id":"foo"}
你可以使用标准的 Python 类型标注为函数中的路径参数声明类型。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
在这个例子中,item_id
被声明为 int
类型。
这将为你的函数提供编辑器支持,包括错误检查、代码补全等等。
如果你运行示例并打开浏览器访问 http://127.0.0.1:8000/items/3,将得到如下响应:
{"item_id":3}
注意函数接收(并返回)的值为 3,是一个 Python
int
值,而不是字符串"3"
。 所以,FastAPI 通过上面的类型声明提供了对请求的自动"解析"。
但如果你通过浏览器访问 http://127.0.0.1:8000/items/foo,你会看到一个清晰可读的 HTTP 错误:
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
因为路径参数 item_id
传入的值为 "foo"
,它不是一个 int
。
如果你提供的是 float
而非整数也会出现同样的错误,比如: http://127.0.0.1:8000/items/4.2
所以,通过同样的 Python 类型声明,FastAPI 提供了数据校验功能。 注意上面的错误同样清楚地指出了校验未通过的具体原因。 在开发和调试与你的 API 进行交互的代码时,这非常有用。
当你打开浏览器访问 http://127.0.0.1:8000/docs,你将看到自动生成的交互式 API 文档:
本文分享自 自动化测试 To share 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!