FastAPI的请求体参数

news2024/11/24 6:22:59

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的两大核心之一,我们将在下面一节中详细介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1292776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python查看文件列表

os.listdir 是 Python 的一个内置函数,用于列出指定目录中的所有文件和子目录。它接受一个字符串参数,即要列出内容的目录的路径。 列出当前工作目录中的所有文件和子目录 files_and_dirs os.listdir() print(files_and_dirs) 列出指定目录中的所…

一则广告,一个故事,这就我选择学习计算机专业的两个原因

还记得当初自己为什么选择计算机? 现在回想起来,当初驱使自己选择学习计算机专业的原因,一共有两个: 一、一则长城电脑的广告。 上个世纪80年代,我还在读小学,当时在中央电视台上经常播放着的长城电脑的一则…

(NeRF学习)3D Gaussian Splatting Instant-NGP

学习参考: 3D Gaussian Splatting入门指南【五分钟学会渲染自己的NeRF模型,有手就行!】 三维重建instant-ngp环境部署与colmap、ffmpeg的脚本参数使用 一、3D Gaussian Splatting (一)3D Gaussian Splatting环境配置…

(一)rtthread主线程启动流程

(一)rtthread主线程启动流程 声明1.启动分析2.源码分析 声明 本文主要为个人学习笔记内容总结,有来自网络及其他,如有雷同,请告知。 1.启动分析 基于:rt-thread-v5.0.1 先执行:汇编代码start…

一文3000字从0到1用Python进行gRPC接口测试!

gRPC 是一个高性能、通用的开源RPC框架,其由 Google 主要面向移动应用开发并基于HTTP/2 协议标准而设计,基于 ProtoBuf(Protocol Buffers) 序列化协议开发,且支持众多开发语言。 自gRPC推出以来,已经广泛应用于各种服务之中。在测…

2023新优化应用:RIME-CNN-LSTM-Attention超前24步多变量回归预测算法

程序平台:适用于MATLAB 2023版及以上版本。 霜冰优化算法是2023年发表于SCI、中科院二区Top期刊《Neurocomputing》上的新优化算法,现如今还未有RIME优化算法应用文献哦。RIME主要对霜冰的形成过程进行模拟,将其巧妙地应用于算法搜索领域。 …

创建第一个 Flink 项目

一、运行环境介绍 Flink执行环境主要分为本地环境和集群环境,本地环境主要为了方便用户编写和调试代码使用,而集群环境则被用于正式环境中,可以借助Hadoop Yarn、k8s或Mesos等不同的资源管理器部署自己的应用。 环境依赖: 【1】…

RTL编码(2)——模块优化

一、顶层模块的划分 在RTL编码中,我们是以模块为单位进行设计的,模块之间的连接和嵌套关系对于电路结构有着很大的影响。一个好的系统设计中,我们应该使得模块尽量满足以下两个标准: 顶层模块扁平化内部模块层次化 1.1 顶层模块扁…

基于springboot + vue的社区医院信息系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

排序:快速排序(hoare版本)

目录 快速排序: 概念: 动画分析: 代码实现: 代码分析: 代码特性: 常见问题: 快速排序: 概念: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&a…

LNMP网站架构分布式搭建部署(编译安装)

目录 一、数据库编译安装 二、nginx编译安装 三、php编译安装 三、通过nfs将三台不同的主机资源共享 四、基础测试 五、完成WordPress站点部署 六、完成bbs论坛站点部署 一、数据库编译安装 1、先下载安装包到/opt目录中,最好选择mysql-boost-5.7.44.tar.gz版…

Linux操作系统 中的用户管理,也就是关于用户的相关的操作与理解

目录 1 概念2 用户管理的类型3、模板目录4 查看历史命令5 相关文件6 创建用户useradd7 命令passwd 存储及shadow命令下的用户密码8 usermod命令(修改属性)9 密码设置10 删除命令userdel11 用户组的操作12 用户权限13 创建一个用户组,并且将这…

短视频账号矩阵系统源码搭建步骤包括以下几个方面:

短视频账号矩阵系统源码搭建步骤包括以下几个方面: 1. 确定账号类型和目标受众:确定要运营的短视频账号类型,如搞笑、美食、美妆等,并明确目标受众和定位。 2. 准备账号资料:准备相关资质和资料,如营业执照…

在Windows 11中,把iPhone照片和视频导出来又快又简单,无需第三方软件

如果你想将照片和视频从iPhone传输到Windows 11 PC,最快、最简单的方法是插入手机并执行自动导入。以下是操作方法。 如何将照片和视频从iPhone导入Windows 如果你用USB数据线将iPhone插入Windows PC,Windows 11可以像标准数码相机一样连接到它&#x…

nacos在win11无法正常启动,一闪而过,pause也不停止。【已解决】

问题一闪而过,无法抓屏。 1.首先排除配置文件和数据库问题; 2.问题及解决方法: 分析:startup.cmd在执行时,无法找到jdk; 解决方法:配置jdk到环境变量; 再次启动正常;

用Pandas轻松进行7项基本数据检查

大家好,作为一名数据工程师,面对糟糕的数据质量,可以使用Pandas执行快捷的数据质量检查。本文使用scikit-learn提供的California Housing数据集,进行基本数据检查。 一、California Housing数据集概述 【数据集】: …

黑苹果之显卡篇

一、什么是显卡 显卡GPU(Video card、Display card、Graphics card、Video adapter)是个人计算机基础的组成部分之一,将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正…

关键字volatile作用和用法

目录 一、多线程编程中的volatile关键字 二、嵌入式编程中的volatile关键字 三、 优化编译器优化 四、 指针类型转换 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 精确地说就是,…

【云原生-K8s】镜像漏洞安全扫描工具Trivy部署及使用

基础介绍基础描述Trivy特点 部署在线下载百度网盘下载安装 使用扫描nginx镜像扫描结果解析json格式输出 总结 基础介绍 基础描述 Trivy是一个开源的容器镜像漏洞扫描器,可以扫描常见的操作系统和应用程序依赖项的漏洞。它可以与Docker和Kubernetes集成,…

shell命令学习(1)——(待完善)

explainshell.com shell统计当前文件夹下的文件个数、目录个数Linux之shell常用命令(三) sort(排序)、uniq(处理重复字符) linux中shell将换行输入到文件中 shell脚本,将多行内容写入文件中 f…