构建现代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

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor