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

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
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.mzph.cn/diannao/34280.shtml

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

相关文章

dockercompose部署redis哨兵模式并集成springboot

第一步 编写compose文件 docker-compose.yml version: 3.8networks:redis-network:driver: bridgeservices:redis-master:image: redis:7.2.4container_name: redis-mastercommand: ["sh", "-c", "redis-server --protected-mode no --slave-announ…

python项目加密和增加时间许可证

1.bat,执行如下的命令,第一句是更新或增加许可证 第二句是加密draw_face.py python offer.py pyarmor obfuscate -O dist draw_face.py绘制自制人脸.py,调用加密的代码draw_face代码 import sys import os import cv2# 添加加密模块所在的路…

R语言做图

目录 1. 图形参数 2. 低级图形 3. 部分高级图形 参考 1. 图形参数 图形参数用于设置图形中各种属性。 有些参数直接用在绘图函数内,如plot函数可以用 pch(点样式)、col(颜色)、cex(文字符号大小倍数&…

ONLYOFFICE 桌面编辑器 8.1

ONLYOFFICE 简介 ONLYOFFICE 是一个开源的办公套件,它提供了在线文档编辑器、表格编辑器和演示文稿编辑器,这些编辑器能够兼容 Microsoft Office 格式(.docx, .xlsx, .pptx)以及其他流行的标准格式。ONLYOFFICE 的核心功能包括多…

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融…

《2024天猫618大促-首波男装销售报告》

这份报告主要分析了2024年天猫618大促期间的首波男装销售情况,从多个维度进行了深入的复盘和分析。报告中不仅包含了销售数据的统计分析,还对消费者行为、品牌表现、产品趋势等方面进行了详细的解读。通过对这些数据和信息的深入挖掘,报告揭示了当前男装市场的一些重要趋势和特…

qt经典界面框架

目的 其实就是一个简单的界面显示,是很常用的形式。 说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。 现在感觉简单多了。 这个框架利用了QT的现成的MainWindow与QDockWidget,这样就…

java基于ssm+jsp 人才公寓管理系统

1管理员功能模块 管理员登录,通过填写用户名、密码进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入人才公寓管理系统可以查看个人中心、住户管理、小区公告管理、停车位管理、安保人员管理、安保值班管理、房屋信息管理、外来登记管理、物品…

自定义User-Agent:使用Python Requests进行网络请求

在网络编程和数据采集领域,HTTP请求是与服务器交互的基本方式。User-Agent(用户代理)是HTTP请求中的一个重要字段,它告诉服务器发起请求的客户端类型和版本信息。在某些情况下,自定义User-Agent可以帮助我们模拟不同的…

CodeIgniter学习笔记 Item6--CI中的常规主题_ci中parent __construct();

$route[default\_controller] welcome; $route[404\_override] ;更重要的功能是,如果我们要实现通过/index.php/news/4.html访问/index.php/article/show/1这样一个需求,可以在routes.php定义路由关系,将原始的URL转换成需要样式 $route[n…

正向代理与反向代理:深入解析与实例讲解

代理服务器是一种网络实体,它充当客户端与服务器之间的中介,负责转发请求和响应。代理服务器可以根据其使用方式和功能的不同,分为正向代理和反向代理。 转转的面试中问到了正向代理和反向代理。所以本篇文章将详细解析这两种代理方式&#…

产品干货 | 如何通过Power Platform快速创建自定义连接器,让开发集成更简单

引言 Introduction: 最近,微软推出了许多新产品功能。迅易科技作为微软13年来紧密的生态合作伙伴,为300行业头部客户实施1000项目。为此,我们总结了多年的项目经验且产品学习心得,邀请了迅易技术专家为大家持续分享微软…

如何自己录制教学视频?零基础也能上手

随着在线教育的蓬勃发展,录制教学视频成为了教师和教育工作者们不可或缺的一项技能。无论是为了远程教学、课程分享还是知识普及,教学视频的录制都变得愈发重要。可是如何自己录制教学视频呢?本文将介绍两种录制教学视频的方法,这…

linux绝对路径与相对路径区别简述

绝对路径与相对路径定义 绝对路径:相对于根路径,只要文件不移动位置,那么它的绝对路径是永恒不变的 相对路径:相对于当前所在目录而言,当前所在的目录可能会改变,所以相对路径不是固定的 路径&#xff…

Availability

译文: #ifndef __AVAILABILITY__ #define __AVAILABILITY__ /* 这些宏都是用在头文件种。它们是作用于和系统版本有关的函数声明或者函数,如果它们是可用的就标示它们首次有效的方法;或者被抛弃的函数。 MAC OS 和_IOS_ 有不同的版本号&…

uniapp小程序button按钮去掉黑色线条

文章目录 导文去除方法 导文 在uniapp的button按钮中有一个莫名其妙的黑色线条 去除方法 button::after{border: none; }该问题并不是所有的手机机型都有,最好添加一下,以防用户手机端样式有问题。 您好,我是肥晨。 欢迎关注我获取前端学习…

Google浏览器快捷方式固定到任务栏启动被其他网页劫持

场景复现 1、Google浏览器设置启动时继续浏览上次打开的网页 2、先浏览CSDN网站,然后关闭Google浏览器 3、再次打开Google浏览器时,除了显示我们上次浏览的CSDN网页外,还默认打开了百度网页 解决办法 1、在Google浏览器中新建标签页&am…

hexo 实战:(三)独立博客运营总结

前言 通过前面两个步骤,完成了静态博客从搭建到基本功能添加和界面优化。那么,这次就要介绍一下搭在 GitHub 上的静态博客如何运营推广。也就是如何让网站被各大搜索引擎收录?如何提高网站权重,提高收录量? 网站收录 …

神经网络 #数据挖掘 #Python

神经网络是一种受生物神经元系统启发的人工计算模型,用于模仿人脑的学习和决策过程。它由大量互相连接的节点(称为神经元)组成,这些节点处理和传递信息。神经网络通常包含输入层、隐藏层(可有多个)和输出层…

2024版 空间杜宾模型和检验代码+结果解释

空间误差、空间滞后、空间杜宾模型,筛选过程 莫兰指数,LM检验,LR检验,WALD检验,代码,及解释用法 空间溢出直接效应间接效应等等空间计量全过程。 原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4…