• 这些调试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/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/

  • 相关阅读:
    计算机毕业设计Java中学生作文大赛管理平台(源码+系统+mysql数据库+lw文档)
    mybatis在mapper中传递多个参数
    CentOS 7 下将 MySQL 5.6 升级为MySQL 5.7
    FreeSWITCH 使用指北(2)-多段音频顺序播放的设置
    ASP.Net Core设置接口根路径的方法
    简述Tomcat的本质
    Python filter 用法
    企业级 NoSQL 数据库 Redis
    OSPF的防止环路的机制
    Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器
  • 原文地址:https://blog.csdn.net/u013655559/article/details/128000774