FastAPI的请求体参数

FastAPI 请求体参数

所谓的请求体参数,就是不在url中的发送的数据,其实我们应该知道http协议是什么。
所谓的协议,就是一种格式的约定。举个生活中的简单的例子,你想买个早餐,你要问老板鸡蛋灌饼多少钱,老板告诉你价格知道,你决定要不要买,然后老板给你鸡蛋灌饼,你给老板钱。
那么在互联网中,你给别人发送数据,也要遵循一定的约定,这个约定,是前人早就约定好的。我们使用互联网,就要遵守人家制定的规则。
HTTP(Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,主要用于从WWW服务器传输超文本到本地浏览器的传输协议。它是一个基于请求与响应模型的、无状态的、应用层协议。客户端(如Web浏览器或API客户端)向服务器发送一个HTTP请求,服务器收到请求后返回一个HTTP响应。

HTTP 请求格式

一个典型的HTTP请求由以下几部分组成:

  1. 请求行:包含方法(GET、POST等)、URL和HTTP版本。
  2. 请求头:包含一些附加信息,如内容类型、认证信息、缓存控制等。
  3. 空行:表示请求头结束,接下来是请求体。
  4. 请求体(可选):用于传递额外的数据,通常在POST、PUT等方法中使用。

GET 示例

GET /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Accept-Language: en-US,en;q=0.9

在这个例子中,客户端请求访问 example.com/api/users/123 资源。这个请求没有请求体,因为GET方法通常不携带数据。
下面是一个使用curl在命令行进行的例子
在这里插入图片描述

POST 示例

POST /api/users/ HTTP/1.1
Host: example.com
Content-Type: application/json
Accept-Language: en-US,en;q=0.9

{
  "username": "john_doe",
  "email": "john.doe@example.com",
  "password": "secretpassword"
}

在这个例子中,客户端向 example.com/api/users/ 发送了一个POST请求,并且在请求体中包含了要创建的新用户的信息。这些信息以JSON格式编码。

GET 和 POST 的区别

  • 可见性:GET请求的所有参数都在URL中显示,而POST请求的参数则放在请求体中,对用户不可见。
  • 长度限制:虽然HTTP规范并没有明确指出GET请求的长度限制,但在实践中,由于URL长度限制,GET请求不适合传输大量数据。相比之下,POST请求可以携带更长的数据。
  • 安全性:由于GET请求中的所有数据都暴露在URL中,所以不应该用来传输敏感信息,比如密码。而POST请求将数据放在请求体中,相对更安全。
  • 缓存:浏览器会对GET请求进行缓存,而不会缓存POST请求。
  • 幂等性:GET请求是幂等的,这意味着多次发出相同的GET请求应该得到相同的结果。而POST请求通常是非幂等的,每次请求可能会有不同的结果,例如创建新的资源。

总结

GET和POST是两种最常用的HTTP方法,它们分别适用于不同的场景。通常来说,GET用于获取资源,而POST用于提交数据。理解这些基本概念有助于正确地构建和使用RESTful API。

在构建 RESTful API 时,我们经常需要处理来自客户端的 JSON 格式的数据。FastAPI 提供了一种非常简单的方式来定义和验证这些数据。

FastAPI中的请求体参数

在 FastAPI 中,我们可以使用 Pydantic 库中的 BaseModel 类来定义请求体参数。例如,假设我们要创建一个用户,我们需要接收包含用户名、电子邮件和密码的 JSON 数据。我们可以这样定义这个模型:


然后,在我们的路由函数中,我们可以将这个模型作为类型提示来接收请求体参数:

from fastapi import FastAPI
from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str
    password: str
    
app = FastAPI()

@app.post("/users/")
async def create_user(user: User):
    return {"username": user.username, "email": user.email}

在这个例子中,user 参数将会被自动解析为一个 User 对象。如果请求体中的数据不符合 User 模型的要求(例如,缺少了某个字段或者字段的类型不对),FastAPI 将会返回一个错误响应。
打开自动化文档进行测试
在这里插入图片描述

验证请求体参数

在FastAPI中,这可以通过使用Pydantic模型来完成。Pydantic模型允许你定义数据模型,并自动进行数据验证和序列化。在你的main.py文件中,添加以下内容:


from typing import Optional
from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    quantity: int

@app.post("/items/")
def create_item(item: Item):
    return item

在这个例子中,我们定义了一个Item模型,它有四个字段:name(一个必需的字符串),description(一个可选的字符串),price(一个浮点数),和quantity(一个整数)。然后我们在create_item函数中使用这个模型作为参数。FastAPI将自动验证请求体是否符合这个模型的定义。如果请求体不符合模型的定义,FastAPI将自动返回一个清晰的错误信息。

结束语

Pydantic是一个很强大的库,是FastAPI的两大核心之一,我们将在下面一节中详细介绍

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值