【Python系列】FastAPI 中的路径参数和非路径参数解析问题

news2024/12/24 21:34:08

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 1.问题描述
    • 2.问题分析
    • 3.解决方案
    • 4.最佳实践
    • 5.结论

在 FastAPI 框架中,路由的配置是构建 RESTful API 的关键步骤。路由配置不仅需要正确地定义路径参数,还需要正确地处理非路径参数,以确保 API 的访问逻辑清晰且正确。然而,当路径参数和非路径参数的前缀一致时,可能会出现一些混淆,导致非预期的路由行为。本文将通过分析给出的代码示例,探讨这一问题,并提供相应的解决方案。
在这里插入图片描述

1.问题描述

在提供的代码示例中,我们可以看到两个路由装饰器@KBRouter.post被应用于两个不同的函数。第一个函数get接收一个路径参数id,而第二个函数get则没有路径参数,但接收一个非路径参数info。两个函数的路由路径前缀都是/collection/docs,这可能导致一些混淆。

FastAPI 路径参数和非路径参数的前缀一致,当访问非路径参数的接口时,会走到路径参数的接口中

@staticmethod
@KBRouter.post("/collection/docs/{id}", description="路径参数接口",
               summary="路径参数接口")
async def get(id: str = None):
    return {
        "code": 0,
        "data": None,
        "msg": "成功"
    }
@staticmethod
@KBRouter.post("/collection/docs/add", description="非路径参数接口",
               summary="非路径参数接口")
async def get(info: str = None):
    return {
        "code": 0,
        "data": None,
        "msg": "成功",
    }

2.问题分析

FastAPI 使用基于 Python 类型提示的参数来定义路径参数和查询参数。路径参数通过在函数参数中使用Path来声明,而非路径参数则直接作为函数参数声明。在上述代码中,第一个get函数使用Path来声明路径参数id,而第二个get函数则直接声明了非路径参数info

问题出现在两个函数的路由路径前缀相同,但一个是路径参数,另一个是非路径参数。当客户端发送请求到/collection/docs/add时,FastAPI 可能会错误地将请求路由到第一个get函数,因为add可以被解释为id的值。

3.解决方案

为了解决这个问题,我们需要确保路径参数和非路径参数的路由清晰区分。以下是几种可能的解决方案:

  1. 更改非路径参数的路由前缀:最简单的方法是更改第二个get函数的路由前缀,以避免与路径参数的前缀冲突。例如,可以将/collection/docs/add更改为/collection/docs/non_path

  2. 使用不同的 HTTP 方法:如果逻辑允许,可以考虑为两个接口使用不同的 HTTP 方法,比如 GET 和 POST,这样可以在不改变路由前缀的情况下区分它们。

  3. 明确区分路径参数和非路径参数:在设计 API 时,应该明确区分路径参数和非路径参数的使用场景,避免在同一个前缀下同时使用它们。

  4. 使用请求体来传递非路径参数:如果非路径参数的数据量较大或者需要更复杂的数据结构,可以考虑使用请求体(如 JSON)来传递这些参数,而不是通过查询参数。

  5. 增加 API 文档和版本控制:通过增加详细的 API 文档和版本控制,可以帮助开发者和用户更好地理解 API 的使用方法,减少因路由混淆导致的错误。

4.最佳实践

在设计和实现 FastAPI 应用时,应该遵循以下最佳实践:

  • 清晰的路由设计:确保每个路由都有清晰、明确的含义,避免使用容易引起混淆的参数名或前缀。

  • 合理的参数使用:合理使用路径参数和非路径参数,确保它们的使用场景和目的清晰。

  • 充分的测试:在部署 API 之前,进行充分的测试,包括单元测试和集成测试,确保 API 的行为符合预期。

  • 错误处理:实现错误处理逻辑,当请求不符合预期时,能够返回清晰的错误信息。

  • 遵循 RESTful 原则:设计 API 时,遵循 RESTful 原则,使用合适的 HTTP 方法和状态码来表达操作和结果。
    在这里插入图片描述

5.结论

FastAPI 是一个强大而灵活的框架,但在设计 API 时,需要特别注意路径参数和非路径参数的区分,以避免路由混淆的问题。通过上述的解决方案和最佳实践,可以确保 API 的清晰性和可用性,为用户提供更好的服务。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

PDF秒变翻页式电子画册

​在当今数字化时代,将PDF文档转换成翻页式电子画册是一种提升作品展示效果和传播效率的有效方式。以下是将PDF秒变翻页式电子画册的攻略,帮助您轻松掌握数字创作技巧。 首先,选择一个合适的制作工具是关键。目前市场上有多种在线平台和软件可…

元素旋转?一个vue指令搞定

说在前面 🎈鼠标控制元素旋转功能大家应该都不陌生了吧,今天我们一起来看看怎么编写一个vue指令来实现元素旋转功能吧! 效果展示 体验地址 http://jyeontu.xyz/jvuewheel/#/JRotateView 实现思路 1、自定义指令对象 export default {inse…

选择门店收银系统要考虑哪些方面?美业系统Java源码分享私

开店前的一个重要事件就是选择门店收银软件/系统,尤其是针对美容、医美等美业门店,一个优秀专业的系统十分重要,它必须贴合门店的经营需求,提供更全面、便捷、高效的管理功能,帮助提升门店的服务质量和经营效益。 以下…

品牌策划背后的秘密:我为何对此工作情有独钟?

你是否曾有过一个梦想,一份热爱,让你毫不犹豫地投身于一个行业? 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在,我一直在广告行业里“混迹”,一路走来,也见证了许多对品牌策划一知半解的求职…

CPsyCoun:心理咨询多轮对话自动构建及评估方法

CPsyCoun: A Report-based Multi-turn Dialogue Reconstruction and Evaluation Framework for Chinese Psychological Counseling 在大模型应用于心理咨询领域,目前开源的项目有: https://github.com/SmartFlowAI/EmoLLM (集合,…

mp4转换成mp3怎么转?教你几种值得收藏的转换方法!

mp4转换成mp3怎么转?MP4,这一深入人心的数字多媒体容器格式,无疑在当今数字世界中占据了一席之地,那么,它究竟有何过人之处呢?首先,MP4的跨平台兼容性是其一大亮点,不论是在Windows的…

(一)、配置服务器的多个网卡路由,访问多个不同网络段

一、现场网络关系说明 有这么一个需要,服务器有三个网口,网口一需要访问外网,网口二需要访问内网1,网口2需要访问内网2。需要配置路由来满足该网络访问需要。 图1 现场网络关系 二、配置教程 步骤1: a、命令行输入…

A股羊群效应CSSD CSAD数据与Stata代码数据(2000-2023)

数据来源 参考马丽老师(2016)的做法,股价数据来源于东方财富网,采用上证180指数及构成上证180指数样本股日收盘价数据作为样本。上证180指数自2002年7月1日起正式发布,其样本股是在所有 A 股股票中抽取最具市场代表性…

react-native在IOS上集成百度地图详解

export default class BaiDuMapTest extends Component { render() { return ( ); } } const styles StyleSheet.create({ container: { flex: 1, justifyContent: ‘center’, alignItems: ‘center’, backgroundColor: ‘#F5FCFF’, }, welcome: { fontSize:…

若依-前后端分离项目学习

第一天(6.24) 具体参考视频 b站 楠哥教你学Java 【【开源项目学习】若依前后端分离版,通俗易懂,快速上手】 https://www.bilibili.com/video/BV1HT4y1d7oA/?share_sourcecopy_web&vd_sourcecd9334b72b49da3614a4257…

公司logo设计大全怎么找?直接帮你设计logo

公司logo设计大全怎么找?在品牌塑造的过程中,Logo无疑是至关重要的一环。一个优秀的Logo不仅能够有效传达公司的核心理念和品牌形象,还能在消费者心中留下深刻的印象。然而,对于许多初创公司或小型企业来说,制作出适合…

【稀疏三维重建】Flash3D:单张图像重建场景的GaussianSplitting

项目主页:https://www.robots.ox.ac.uk/~vgg/research/flash3d/ 来源:牛津、澳大利亚国立 文章目录 摘要1.引言2.相关工作3.方法3.1 背景:从单个图像中重建场景3.2 单目前向的多个高斯 4.实验4.14.2 跨域新视角合成4.3 域内新视图合成 摘要 F…

OpenBayes 教程上新 | 5 秒完成高考作文,Llama 3-Chinese-Chat Demo 上线!

Llama 3 自发布以来备受关注,并被誉为「迄今为止最好的开源大模型」,但 Llama 3 在支持中文方面仍然存在一些问题,比如在使用中文提问时,经常发生英文回复或者中英混合回复的情况,非常不方便。 使用中文向 Llama 3-8B-…

web应用-Nginx学习笔记01-应用的组成结构,配置项的分类和理解

参考来源: 在线文档:Nginx开发从入门到精通,https://docs.pythontab.com/nginx/nginx-book/ 极客专栏:nginx核心100讲,作者:陶辉 书籍:《深入理解Nginx:模块开发与架构解析》第二章 参考来源&a…

ONLYOFFICE 桌面编辑器 8.1

ONLYOFFICE 桌面编辑器 8.1 ONLYOFFICE 简介一、轻松编辑器 PDF 文件二、用幻灯片版式快速修改幻灯片三、无缝切换文档编辑、审阅和查看模式四、**改进从右至左语言的支持 & 新的本地化选项**五、隐藏“连接到云”板块六、在演示文稿中播放视频和音频文件七、版本 8.1&…

AI视频改字系统+五端兼容+卡密兑换+内置素材,系统搭建部署

目录 前言: 一、AI视频改字系统是什么 二、AI视频改字系统的功能 三、总结 前言: AI视频改字是利用套模板的原理,对短视频的模板进行更改,从而生成新的短视频。当然这个AI短视频改字系统都是有素材的,不用自己上传…

公共云遣返的经济性

在过去的几年里,显而易见的是,尽管公有云具有所有优势,但它并不能大规模地节省成本。它在一定程度上提高了生产力,但不会降低您的成本。公有云的好处在于,它提供了一个非常强大的价值主张,即基础设施可以立…

开放式供应链,践行智能费控4.0模式的基石

消费供应链在企业传统费用管理模式中是极度边缘化的存在,财务将其界定在职责之外,行政则因为价格政策不断的摇摆在不同的渠道之间。到了3.0移动报销时代,费控报销SaaS也只是简单的通过跳转或捆绑的方式来完成消费场景的接入,而将重…

植物大战僵尸杂交版2.1版本终于来啦!游戏完全免费

在这个喧嚣的城市里,我找到了一片神奇的绿色世界——植物大战僵尸杂交版。它不仅是一款游戏,更像是一扇打开自然奥秘的窗户,让我重新认识了植物和自然的力量。 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d6…

Ncat 网络工具

文章目录 Ncat 网络工具简介基础说明使用示例基础示例两个 ncat 互相连接访问 WEB 网站充当 WEB 服务器 文件传输与 Broker文件传输作为 Broker ,广播消息作为 Broker,成为文件传输中介 多人聊天室使用 SSL,提高传输安全性执行命令行访问控制…