这些调试API技巧你熟悉吗?

news2024/11/19 5:36:06

通常,我们在调试第三方提供的API时,有时候并没那么顺畅,甚至可能本身就是API服务有问题,但是需要提供你结论的"依据"。下面整理了一些API调试技巧,也方便你甩锅

简单来说分为以下两点

  • 检测状态信息
  • 检测返回数据

接下来用接口管理工具Apifox来演示如何运用接口可视化工具来定位接口问题

1 检测接口状态码

当我们对某个API发起请求时,API所在的服务器会返回一个HTTP状态码,通过这个状态码我们可以了解到API请求的状态。常见的状态码 比如:401代表不具备访问权限; 500代表服务器出错

通过状态码来检测接口是否正常调用,这也是调试接口的第一要素。

下面是一些常用的接口状态码报错

  • 400表示请求参数错误,我们可以查找是否存在语法错误,如输入错误或畸形的JSON正文。
  • 401表示未经授权,我们需要确实是否有访问对应目标资源的有效认证凭证,同时确认没有语法问题。
  • 403表示服务器拒绝请求,此时可以检查我们具有的权限和范围,以确保能被授权访问资源。
  • 418表示我就是个杯具(I 'm a Teapot),可能表示请求是提供者不想处理的请求,例如自动查询。
  • 429表示太多的请求,此时我们可以检查文档,以便了解使用频率限制或着稍后再试。

这里以Apifox接口管理工具调试为例,支持的校验响应,可以自动校验接口响应状态码是否符合我们的预期

2 进阶调试分析

这里分享几个常见的请求API场景,也是你可能会掉入的坑:

畸形的JSON

当你在发送JSON时会犯一些常见的错误。在JSON字符串中,单引号无效,因此请确保将字符串和属性名用双引号括起来。此外,JSON不支持注释,所以要么尽量简化,要么根本不添加它们。

Content type头

Content- type和Accept头有助于在客户端和服务器之间进行内容协商。Content-type请求头告诉服务器,客户端发送的信息类型。而Accept请求头告诉服务器,客户机可以理解什么类型的内容。一些API需要特定的请求头,并且只处理特定的内容类型。

比如: 根据Accept header 返回对应格式图片

下面是以Apifox官方推出的 Apifox Echo中的一个例子作为演示

Apifox Echo 是 Apifox 官方提供的 简单的接口请求和返回数据服务

在线调试连接:https://www.apifox.cn/apidoc/project-1608695/api-39492119

序列化数据

REST API常见的以JSON的形式存储和发送数据。而为了保证正确传输数据,我们可以使用JSON.stringify()对数据进行编码,及JSON.parse()对其进行解码。此外,服务器可能要求您设置一个application/json类型的Content-Type头。进一步检查后,如果你看到返回值出现像[object object]或Unexpected token,表明我们非法的进行了序列化和反序列化。

类型转换

在准备发送请求或解析响应时,可以将值从一种类型转换为另一种类型。根据编程语言的不同,对字符串执行数学计算可能会导致失败,但当我们将字符串转换为数字时,就可以处理转换后的数据了。

比如:我们调试的接口响应返回的是base64格式,这时候我们想解析这个数据的原数数据,我们可以在Apifox的后置操作中添加脚本,通过定义脚本对数据进行转换

如下所示

提取信息

使用JSON.parse()反序列化JSON响应后,就可以使用点或括号符号访问所有信息。如果您试图访问一个复杂结构中的深层嵌套信息,您可能需要一步一步地将其分解,以精确地引用该信息,并确保您不会试图使用到一些未定义的东西中。

身份验证与授权

身份验证是指验证用户的身份,而授权则确认用户拥有访问资源的权限。如果请求中包含了适当的授权头,但仍然不能访问资源,请仔细检查与凭据相关的权限和作用域。

文章参考:
https://stackoverflow.blog/2022/02/28/debugging-best-practices-for-rest-api-consumers/

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

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

相关文章

MySQl(八):索引机制

MySQl:索引索引概述索引结构B树的演变过程B树Hash索引分类聚集索引和二级索引### 回表查询思考索引语法普通索引联合索引删除索引索引使用索引使用规则之验证索引效率索引使用规则之最左前缀法则索引使用规则之索引失效情况索引使用规则之SQL提示索引使用规则之覆盖…

java多线程

最近看了寒食君的java多线程的教程,感觉深受启发,做个笔记以后方便回忆。 寒食君的个人空间-寒食君个人主页-哔哩哔哩视频 java多线程 什么是线程模型? JVM线程与操作系统线程之间存在着某种映射关系,这两种不同维度的线程之间的规范和协…

SpringCloud微服务(十)——Hystrix服务降级熔断限流

Hystrix服务降级熔断限流 SpringCloud,已停更 前言 分布式系统面临的问题,复杂分布式体系结构中的应用程序,有数10个依赖关系(feign调用), 每个依赖关系在某些时候将不可避免地失败。低耦合就是微服务之间关系少。当…

pytorch初学笔记(十):神经网络基本结构之最大池化的使用

目录 一、最大池化:下采样 1.1 参数介绍 1.2 公式 二、最大池化的作用和目的 三、代码实战 3.1 题目要求 3.2 池化的具体实现 3.2.1 步骤 3.2.2 报错及其原因 3.2.3 ceil_mode不同运行的结果不同 3.2.4 完整代码 3.3 tensorboard可视化 一、最大池化&…

【强化学习论文合集】AAMAS-2022 强化学习论文 | 2022年合集(三)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

相控阵天线(六):直线阵列特殊综合方法(变形泰勒综合法、贝利斯综合法、伍德沃德抽样法)

目录简介变形泰勒综合法贝利斯综合法伍德沃德-劳森抽样法配相抵消法简介 阵列天线的综合问题是其分析的逆问题,即是在预先给定辐射特性(如方向图形状、副瓣电平等)的情况下,综合出阵列激励幅度和相位。其中特殊综合主要包括:左右副瓣电平不相…

关于Idea合并不同分支代码你怎么看

一、环境说明 1. IDEA版本 2020.1 2. git版本 2.33.0 二、整体合并 1. 软件开发中,在一次版本迭代过程中,大家可能会在同一个开发分支dev进行开发,同时开发不同功能 ,开发完以后需要自行合并到测试分支test,交给测试…

Feign高级实战-源码分析

目录参考导读什么是FeignFeign 和 Openfeign 的区别OpenFeign的启动原理在启动类申明EnableFeignClientsregisterDefaultConfigurationregisterFeignClientsregisterFeignClientgetTarget()创建一个代理对象HttpClientFeignLoadBalancerConfigurationOpenFeign 的工作原理动态代…

多策略协同改进的阿基米德优化算法及其应用(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

论文阅读:On the User Behavior Leakage from Recommender System Exposure

论文地址 Motivation: 现阶段对于用户行为的保护仅仅从用户端来考虑,比如用户的行为数据等。然而推荐系统是一个闭环的过程,即用户交互了物品,推荐系统根据用户的交互信息去推荐物品,用户也会根据推荐系统推荐的物品做…

[Java] 浅析rpc的原理及所用到的基本底层技术

文章目录前言阅读前须知rpc是什么?别的进程 vs 别的机器rpc的目的或是我们为什么需要rpc?实现rpc所涉及到的底层技术1. 通信技术(网络IO、Network IO)套接字(Socket)bio、nio与Netty2. 网络协议&#xff08…

【仿真建模】第三课:AnyLogic入门基础课程 - 多层建筑行人疏散仿真讲解

文章目录一、Agent类的概念二、行人疏散仿真2.1 仿真模型示意图2.2 具体实现步骤一、Agent类的概念 二、行人疏散仿真 2.1 仿真模型示意图 2.2 具体实现步骤 首先,新建模型 新建一个MyFloor1对象,代表第一个楼层 创建矩形墙,并放到原点…

专业数采软件DXP OPC Server售后问题解决方案

DeviceXPlorer OPC Server是一套实现工业自动化设备数据读取或发送的软件。它提供与制造车间中的控制设备(如 PLC、机床和机器人)的连接,支持200多种设备通讯协议,便捷的配置,快速实现设备联网采集。 在与设备通讯方面…

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

idea永久设置maven配置,新项目不用再设置

在这里设置就是永久的设置,新项目将使用该设置,maven的配置也在新项目和新模块创建的时候直接加载 英文的话,看位置大概也应该可以找到 点开后左上角搜索maven,找到如图maven的设置 主路径就是maven的安装包软件的路径 用户设置…

LeetCode 110平衡二叉树 257.二叉树的所有路径 404左叶子之和

文章目录110平衡二叉树c 代码实现python 代码实现257.二叉树的所有路径c代码实现python 代码实现404左叶子之和c 代码实现python 代码110平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个…

http 知识整理

1. 启发式缓存 在不设置cache-control/expires的情况下,浏览器不会默认进入协商缓存。而是根据Date/LastModified去自动计算出合适的缓存时间。 计算方式为:(Date - LastModified) * n n:LM-Factor,处于[0,1]之间 2. 强制缓存 -…

Vue的模版代码与数据绑定方式

目录 模版代码 插值语法 指令语法 数据多层访问 vue模版语小结 数据绑定方式 模版代码 插值语法 插值语法就是使用{{xxx}}描述的 <div id"root">{{name}} </div> 指令语法 <div id"root"><a :href"school.url">…

lazada买家订单导出

下载安装与运行 https://www.yuque.com/webcrawl/handbook/mtad3q 用途与功能 所见即所得的导出自由选择导出项支持Excel、JSON两种方式导出自由排序Excel导出列顺序导出过程中有进度提示&#xff0c;用户可以随时提前中止 导出过程演示 选择lazada订单导出&#xff0c;开始…

linux内核整体架构

操作系统概念 操作系统属于软件范畴&#xff0c;负责管理系统的硬件资源。OS具备的功能&#xff1a;1.为应用程序提供执行环境。2.为多用户和应用程序管理计算机的硬件资源。3.虚拟化功能。4.支持并发。 宏内核与微内核架构 宏内核&#xff1a;所有的内核代码都编译成二进制…