When/Where 在 FastAPI 中使用 Body/Path/Query/Field?
When/Where to use Body/Path/Query/Field in FastAPI?
我正在关注 FastAPI 的 the tutorial,到目前为止我对 When/Where 在 FastAPI 中使用 Body/Path/Query/Field 有疑问? 因为它们似乎都以相同的方式工作,本教程对它们的 区别 使用了模糊的解释,还是我遗漏了什么?
奖金问题:*
真的有用吗?我在 the sample code 的教程中 set/omitted 它,但我看不出有什么不同。
其实完全不同
我们以URL标签为FastAPIlink的问题为例,拆分成几个部分。
https://whosebug.com/questions/tagged/fastapi?sort=Newest&uqlId=26120
- whosebug.com -> 域
- /问题 -> 路径
- /tagged -> 路径
- /fastapi -> 路径参数。
- sort=Newest -> 查询参数。
- uqlId=26120 -> 查询参数。
如果您想在 FastAPI 中创建它,它将看起来像这样。
from enum import Enum
class SortTypes(str, Enum):
newest: str = "Newest"
unanswered: str = "Unanswered"
active: str = "Active"
bountied: str = "Bountied"
@app.get("/questions/tagged/{tag}")
async def get_questions_with_tags(tag: str, sort: SortTypes, uqlId: int):
return ...
查询参数和路径参数几乎相同。
但是body完全不同
您无法看到来自 URL 的请求的 body,您的客户端以字节形式发送 HTTP Body 但它可以包含任何内容,并且您需要指定 body 包含通过 HTTP Headers.
通过这样做,您告诉服务器它应该如何处理 body。例如
假设您正在发送一个 JSON {"name": "foo"}
并且它将与此 header {"Content-Type": "application/json"}
一起发送,您的客户端会处理这个因为默认情况下 FastAPI returns JSONResponse
,还有其他响应类型,如 StreamingResponse
、FileResponse
、HTMLResponse
等(您可以阅读常见的 Content-Type here).
查询参数和路径参数之间的主要区别在于它们可以从 URL 访问并且它们是字符串。但是 Body 但是通常它携带数据。
假设您有一个更大的应用程序,并且您正在使用 Query
参数进行客户端和服务器之间的所有通信。这将是一场彻底的灾难。
例如,你现在正在阅读这个答案对吗?但是它是怎么来的呢?您的 ID、您的声誉、问题本身的所有详细信息都来自 body。想象一下在 URL 中发送所有这些,完全是灾难。
如需进一步阅读,您可以查看这些答案以查看设计 REST 的最佳实践 API。
我正在关注 FastAPI 的 the tutorial,到目前为止我对 When/Where 在 FastAPI 中使用 Body/Path/Query/Field 有疑问? 因为它们似乎都以相同的方式工作,本教程对它们的 区别 使用了模糊的解释,还是我遗漏了什么?
奖金问题:*
真的有用吗?我在 the sample code 的教程中 set/omitted 它,但我看不出有什么不同。
其实完全不同
我们以URL标签为FastAPIlink的问题为例,拆分成几个部分。
https://whosebug.com/questions/tagged/fastapi?sort=Newest&uqlId=26120
- whosebug.com -> 域
- /问题 -> 路径
- /tagged -> 路径
- /fastapi -> 路径参数。
- sort=Newest -> 查询参数。
- uqlId=26120 -> 查询参数。
如果您想在 FastAPI 中创建它,它将看起来像这样。
from enum import Enum
class SortTypes(str, Enum):
newest: str = "Newest"
unanswered: str = "Unanswered"
active: str = "Active"
bountied: str = "Bountied"
@app.get("/questions/tagged/{tag}")
async def get_questions_with_tags(tag: str, sort: SortTypes, uqlId: int):
return ...
查询参数和路径参数几乎相同。
但是body完全不同
您无法看到来自 URL 的请求的 body,您的客户端以字节形式发送 HTTP Body 但它可以包含任何内容,并且您需要指定 body 包含通过 HTTP Headers.
通过这样做,您告诉服务器它应该如何处理 body。例如
假设您正在发送一个 JSON {"name": "foo"}
并且它将与此 header {"Content-Type": "application/json"}
一起发送,您的客户端会处理这个因为默认情况下 FastAPI returns JSONResponse
,还有其他响应类型,如 StreamingResponse
、FileResponse
、HTMLResponse
等(您可以阅读常见的 Content-Type here).
查询参数和路径参数之间的主要区别在于它们可以从 URL 访问并且它们是字符串。但是 Body 但是通常它携带数据。
假设您有一个更大的应用程序,并且您正在使用 Query
参数进行客户端和服务器之间的所有通信。这将是一场彻底的灾难。
例如,你现在正在阅读这个答案对吗?但是它是怎么来的呢?您的 ID、您的声誉、问题本身的所有详细信息都来自 body。想象一下在 URL 中发送所有这些,完全是灾难。
如需进一步阅读,您可以查看这些答案以查看设计 REST 的最佳实践 API。