如何调用api接口(vue获取api接口数据)

当我们使用一些别人实现的API接口时,如何调试?当我们使用的API返回一些意外错误时,我们该怎么办?这个问题可能是用户输入或者API本身,或者其他完全无关的内容

当我们使用一些别人实现的API接口时,如何调试?当我们使用的API返回一些意外错误时,我们该怎么办?这个问题可能是用户输入或者API本身,或者其他完全无关的内容造成的。调试是我们定位和修复由单个API调用或一系列调用引起的问题的地方。通常情况下,我们可以对自己不能完全掌握的代码进行调试,这样就可以清楚地理解这部分代码。我们在使用API的时候,除了意外的异常之外,可能还会出现解析输出或者传递变量的错误。

在本文中,我们将深入研究快速可靠地调试REST API的方法和原理。

API debugging到底是什么

调试的目的是理清输入和输出的关系。通常,问题的根本原因是基于可观察到的现象来定位的。但是当我们同时使用不同服务商提供的API或者不同的API资源时,可能会增加调试的难度。

理想情况下,我们将使用稳定的测试和监控系统,该系统可以在问题发生时提醒我们,并帮助我们初步确定问题的原因。同时,即使你没有这种高水平的监控系统,一些常用有效的方法也可以帮助我们减少发现和修复问题所需的时间和精力。

以下是查找问题的方法:

先定位因为引起该问题的API检查状态信息更深入地检查数据

接下来,我将使用Postman来演示这种调试方法,但这种方法也可以应用于其他开发工具。

1、定位API

第一步,定位引起问题的API,确定问题真的是由API的调用引起的,或者是API本身,或者是API内部的处理,或者是完全不相关的东西。再现问题,深入定位,以便进一步分析问题。同时,我们可以调整传递给API的输入参数,并分析输出信息。如果这种方法不能识别输入和输出之间的关系,那么问题可能不是API调用本身造成的,而是其他原因造成的,比如第三方服务或基础设施的变化导致的意外行为。

如何调用api接口(vue获取api接口数据)插图

图1再现了这个问题,以便进行深入分析。

2、检测状态码

当我们通过API进行交互时,服务器会返回一个HTTP状态码,表示我们的API请求的状态。这个状态码和错误消息是由API提供者决定的,所以它们的含义和准确性是不同的。然而,大多数API提供者通常使用状态代码的第一个数字来响应响应类。比如400表示客户端有问题,更新请求可以解决问题。500表示服务器有问题。此时,除了验证我们正在访问适当的资源并检查它们之外,我们无能为力,除非我们是API的实现者。

服务器返回的可靠状态消息是我们追踪错误来源的第一条线索。下面是一些常见的客户端错误代码,我在这里解释相应的解决方案:

400表示请求参数是错误的。我们可以发现是否存在语法错误,例如输入错误或格式错误的JSON正文。

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

如何调用api接口(vue获取api接口数据)插图(1)

图2使用从4开始的错误代码来表示客户端中存在异常。

3、深入分析

下一步是深入挖掘并测试我们的假设。我们可以验证每个请求都被正确发送,每个响应都被正确解析。当我们沿着API调用序列传递数据时,我们还可以验证变量的定义和引用是否正确。

以下是处理HTTP api时的常见问题:

畸形的JSON:新手在发送JSON时会犯一些常见的错误。在JSON字符串中,单引号无效,因此请确保将字符串和属性名用双引号括起来。此外,JSON不支持注释,所以要么尽量简化,要么根本不添加它们。序列化数据:REST api经常以JSON对象的形式存储和发送数据。为了正确传输数据,请确保使用JSON.stringify()对数据进行编码,并使用JSON.parse()对其进行解码。此外,服务器可能要求您设置一个application/json类型的Content-Type头。进一步检查后,如果您看到像[object object]或Unexpected token这样的值,这表明我们非法的进行了序列化和反序列化。类型转换:在准备发送请求或解析响应时,可以将值从一种类型转换为另一种类型。根据编程语言的不同,对字符串执行数学计算可能会导致失败,但当我们将字符串转换为数字时,就可以处理转换后的数据了。提取信息:使用JSON.parse()反序列化JSON响应后,就可以使用点或括号符号访问所有信息。如果您试图访问一个复杂结构中的深层嵌套信息,您可能需要一步一步地将其分解,以精确地引用该信息,并确保您不会试图使用到一些未定义的东西中。身份验证与授权:身份验证是指验证用户的身份,而授权则确认用户拥有访问资源的权限。如果请求中包含了适当的授权头,但仍然不能访问资源,请仔细检查与凭据相关的权限和作用域。Content type头:Content- type和Accept头有助于在客户端和服务器之间进行内容协商。Content-type请求头告诉服务器,客户端发送的信息类型。而Accept请求头告诉服务器,客户机可以理解什么类型的内容。一些api需要特定的请求头,并且只处理特定的内容类型。

对于这些常见的错误,我们可以依靠语法高亮、checker和其他检查功能来帮助我们检查它们。同时,我们可以使用开发人员控制台查看应用程序的网络调用和日志语句,这可以帮助我们根据一个调用到另一个调用的输入、输出和数据传输来定位问题。例如,如果您有一个同步或异步调用序列,记录关键节点的值或设置条件断点,以进一步快速找出问题。在整个调用执行过程中使用console.log()等控制台语句,可以进一步验证我们假设的分析输出。

如何调用api接口(vue获取api接口数据)插图(2)

图3使用控制台查找问题

调整策略

许多调试策略有助于缩小问题原因的范围。这些策略大致可以分为三类。

1、蛮力策略

如果您对系统的分析方法有限,这意味着您需要调整和记录一切。在整个API调用序列中的某些点添加策略日志语句可能会有所帮助。但是,大量的日志会降低性能,因为处理日志数据需要更多的时间。

2、回溯策略

这个策略指的是从第一次发现错误的地方向后移动,直到找到错误的根本原因。类似地,您可以从显示预期行为的API调用开始,然后逐步执行后续调用,直到发现错误。当你对问题的可能原因有合理的假设时,这个策略是有效的,否则就没那么有效了。

3、逐个各个击破

在一个复杂的系统中,将系统分解成更小的部分可能会使我们更容易发现问题。二分搜索法就是这种策略的一个例子。在这种情况下,您可以在长调用序列中输入日志语句或断点。如果在断点之前有任何缺陷,对调用的后半部分重复该过程,依此类推。另一种策略是使用模拟服务器来隔离被测试的系统。您可以依靠模拟的响应来获得外部依赖性,或者为您的场景提供一个起点。

保持调试的心态

一段时间后,专注于一个问题而没有进展,可能会对定位问题失去信心,因为此时我们毫无头绪。以下策略可以帮助你获得更有效的调试心态。

橡皮鸭调试(Rubber duck debugging):向别人阐明问题和假设可能会迫使你静下心来,明确地陈述你的假设,从而改变你自己的观点。从集中模式切换到分散模式(Switch from a focused to diffused mode):完全切换到不同的活动,比如徒步旅行,会让你的大脑进入一个不同的状态。扩散学习模式是当你的大脑被动地建立新的联系,并可能导致创造性的见解。这就是为什么你在洗澡的时候或者刚醒来的时候会有最好的想法的原因。在调试时节省时间和精力

无论您是REST api的新手还是经验丰富的老手,一致且有条理的调试方法都可以节省时间和精力。您选择的调试策略取决于系统的可观测性。如果使用预定义的日志和堆栈跟踪对您的系统进行全面监控,那么您可以快速发现问题,甚至可能立即发现错误。如果没有采取这些措施,您可以简化问题以缩小搜索范围,并使用一些调试策略来定位根本原因。

原始链接:

https://stack overflow . blog/2022/02/28/debugging-best-practices-for-rest-API-consumers/

作者:乔伊斯·林

来源:51CTO技术栈

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/200160.html

发表回复

登录后才能评论