构建现代API:FastAPI中Query与Body参数的最佳搭配

2024-09-07 14:12

本文主要是介绍构建现代API:FastAPI中Query与Body参数的最佳搭配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在FastAPI中,QueryBody 是两种不同的依赖注入器,它们的应用场景取决于你的具体需求。以下是它们各自常见的使用场景:

Query 参数

使用场景:

  • 当你需要从URL中获取一些简单的参数时,例如过滤、排序、分页等。 当数据量不大,且可以作为URL的一部分安全传输时。
  • 当数据不需要复杂的结构时。

Body 参数

使用场景:

  • 当你需要发送较为复杂的数据结构时,例如包含多个字段的对象。
  • 当数据量较大,不适合作为URL的一部分时。
  • 当数据需要严格的验证和格式化时。

说明一下二者的区别

Query

Query 用于处理URL查询参数。查询参数是在URL中以键值对形式出现的部分,通常位于URL的问号之后。例如,在URL http://example.com/items?item_id=1&name=Example 中,item_idname 就是查询参数。

你可以使用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 从请求体中获取数据。此外,它们可以有不同的验证条件,但这些条件的使用方式是相似的。你可以使用相同的验证器,如gtgemin_lengthmax_length等,来确保数据符合预期的要求。

这篇关于构建现代API:FastAPI中Query与Body参数的最佳搭配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145280

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据