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

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

序列化数据

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

类型转换

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

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

如下所示

提取信息

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

身份验证与授权

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

文章参考:
https://stackoverflow.blog/20...


前端那些趣事公众号
陪你聊聊前端那些趣事

95年程序猿,搞前端,爱音乐,唱跳rap工程🌲

454 声望
950 粉丝
0 条评论
推荐阅读
一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。知识点详解秒杀系统架构图秒杀流程图秒杀系统设计这篇文章一万多...

王中阳Go34阅读 2.6k评论 1

封面图
一个HTTP请求的曲折经历
作为程序员的我们每天都在和网络请求打交道,而前端程序员接触的最多的就是HTTP请求。平时工作中,处理网络请求之类的操作是最多的了。但是一个请求从客户端发出到被服务端处理、再回送响应,再被客户端接收这一...

nero24阅读 5.1k评论 1

Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增...

民工哥23阅读 1.1k

封面图
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。

机器铃砍菜刀24阅读 58.3k评论 2

最好用的 python 库合集
🎈 分词 - jieba优秀的中文分词库,依靠中文词库,利用词库确定汉子之间关联的概率,形成分词结果 {代码...} 🎈 词云库 - wordcloud对数据中出现频率较高的 关键词 生成的一幅图像,予以视觉上的突出 {代码...} 🎈 ...

tiny极客11阅读 2.9k评论 2

封面图
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬14阅读 1.8k

万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide8阅读 1.7k

封面图

95年程序猿,搞前端,爱音乐,唱跳rap工程🌲

454 声望
950 粉丝
宣传栏