通常,我们在调试第三方提供的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/