构建现代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#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Java 中 Optional 的用法及最佳实践

《Java中Optional的用法及最佳实践》在Java开发中,空指针异常(NullPointerException)是开发者最常遇到的问题之一,本篇文章将详细讲解Optional的用法、常用方... 目录前言1. 什么是 Optional?主要特性:2. Optional 的基本用法2.1 创建 Opti

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

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

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