本文主要是介绍构建现代API:FastAPI中Query与Body参数的最佳搭配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在FastAPI中,Query
和 Body
是两种不同的依赖注入器,它们的应用场景取决于你的具体需求。以下是它们各自常见的使用场景:
Query 参数
使用场景:
- 当你需要从URL中获取一些简单的参数时,例如过滤、排序、分页等。 当数据量不大,且可以作为URL的一部分安全传输时。
- 当数据不需要复杂的结构时。
Body 参数
使用场景:
- 当你需要发送较为复杂的数据结构时,例如包含多个字段的对象。
- 当数据量较大,不适合作为URL的一部分时。
- 当数据需要严格的验证和格式化时。
说明一下二者的区别
Query
Query
用于处理URL查询参数。查询参数是在URL中以键值对形式出现的部分,通常位于URL的问号之后。例如,在URL http://example.com/items?item_id=1&name=Example
中,item_id
和 name
就是查询参数。
你可以使用Query
来指定一个路径操作函数的参数应该从查询字符串中获取,并且可以添加额外的验证条件,例如最大长度、最小长度等。
示例:
from fastapi import FastAPI, Queryapp = FastAPI()@app.get("/items/")
async def read_items(item_id: int = Query(..., gt=0), name: str = Query(None, max_length=50)):return {"item_id": item_id, "name": name}# 测试用的客户端请求
# GET /items/?item_id=5&name=Example
在这个例子中,item_id
必须是一个大于0的整数,而name
是一个可选参数,如果有提供的话,它的长度不能超过50个字符。
Body
Body
用于处理请求体中的数据。请求体通常用于发送较大量的数据,特别是当数据结构复杂时,例如JSON对象
。Body
使得你可以从请求体中提取特定的数据,并且可以添加验证条件,如gt
(大于)、ge
(大于等于)等。
示例:
from fastapi import FastAPI, Bodyapp = FastAPI()@app.post("/items/")
async def create_item(item_id: int = Body(..., gt=2)):return {"item_id": item_id}# 测试用的客户端请求
# POST /items/
# Content-Type: application/json
#
# {
# "item_id": 5
# }
在这个例子中,item_id
必须是一个大于2的整数,并且它从请求体中的JSON数据中提取出来。
总结
- Query: 用于处理URL查询参数,即URL中
?
后面的部分。 - Body: 用于处理请求体中的数据,通常用于处理POST、PUT等请求中的JSON数据。
两者的主要区别在于它们从哪里获取数据:Query
从URL查询字符串中获取数据,而Body
从请求体中获取数据。此外,它们可以有不同的验证条件,但这些条件的使用方式是相似的。你可以使用相同的验证器,如gt
、ge
、min_length
、max_length
等,来确保数据符合预期的要求。
这篇关于构建现代API:FastAPI中Query与Body参数的最佳搭配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!