Validation 何时/何地在FastAPI中使用正文/路径/查询/字段?
我是FastAPI的追随者,到目前为止,我对何时/何地在FastAPI中使用Body/Path/Query/Field有疑问?因为它们的工作方式似乎都是一样的,教程对它们的区别使用了模糊的解释,还是我遗漏了什么Validation 何时/何地在FastAPI中使用正文/路径/查询/字段?,validation,metadata,fastapi,Validation,Metadata,Fastapi,我是FastAPI的追随者,到目前为止,我对何时/何地在FastAPI中使用Body/Path/Query/Field有疑问?因为它们的工作方式似乎都是一样的,教程对它们的区别使用了模糊的解释,还是我遗漏了什么 奖金问题:*真的有用吗?我在教程中设置/省略了它,但我看不出有什么区别。实际上,它们完全不同 让我们以使用FastAPI链接标记的问题的URL为例,并将其分成几个部分 https://stackoverflow.com/questions/tagged/fastapi?sort=Newe
奖金问题:
*
真的有用吗?我在教程中设置/省略了它,但我看不出有什么区别。实际上,它们完全不同
让我们以使用FastAPI链接标记的问题的URL为例,并将其分成几个部分
https://stackoverflow.com/questions/tagged/fastapi?sort=Newest&uqlId=26120
- stackoverflow.com->domain
- /问题->路径
- /taged->路径
- /fastapi->路径参数
- 排序=最新的查询参数
- uqlId=26120->查询参数
从枚举导入枚举
类排序类型(str、Enum):
最新:str=“最新”
未回答:str=“未回答”
活动:str=“活动”
悬赏:str=“悬赏”
@app.get(“/questions/taged/{tag}”)
异步def获取带有标记的问题(标记:str,排序:SortTypes,uqlId:int):
返回。。。
查询参数和路径参数的工作原理几乎相同
但是身体是完全不同的
您无法从URL看到请求的主体,您的客户端以字节的形式发送HTTP主体,但它可以包含任何内容,您需要通过HTTP头指定主体包含的内容
这样做,就是告诉服务器应该如何处理该主体。比如说
假设您正在发送一个JSON{“name”:“foo”}
,它将与此标题一起发送{“Content Type”:“application/JSON”}
,您的客户端将处理此问题,因为默认情况下FastAPI返回JSONResponse
,还有其他响应类型,如StreamingResponse
,FileResponse
,HTMLResponse
etc(您可以从中读取常见内容类型)
查询参数和路径参数之间的主要区别在于,它们可以从URL访问,并且是字符串。但身体是,而且通常,它携带数据
假设您有一个更大的应用程序,并且正在使用Query
params进行客户端和服务器之间的所有通信。这将是一场彻底的灾难
例如,现在你正在阅读这个答案,对吗?但是它是怎么来的?所有的细节,你的身份证,你的名声,问题本身都以身体的形式出现。想象一下,将所有这些都发送到URL中,完全是灾难
为了进一步阅读,您可以查看这些答案以了解设计RESTAPI的最佳实践
curl-xput”http://127.0.0.1:8000/items4/345?q=holmes“-H”accept:application/json“-H”内容类型:application/json“-d”{“item\”:{“name\”:“string\”,“description\”:“string\”,“price\”:0,\“tax\”:0},\“user\:{“username\”:“string\”,“full\u name\:”字符串\“}、\“重要性\”:1}“
@БιλιαμΑρκεεε-ε-oh ofc,但正文可以是任何类型、图像、base64编码字符串、JSON或字节对象等。我将更新我的答案,对正文进行更好的解释。非常感谢。