更早、更快、更好、更强:通过区分API流量来捕捉突破性变化

2020-09-23 07:24:41

如果您使用Web应用程序,您有时可能会觉得您的工具抛弃了您。你说得没错。由于现代技术堆栈的设置方式,要确保您的代码执行其应该执行的操作变得越来越困难。

在这篇博客文章中,我们将向您展示一个今天从裂缝中溜走的bug,解释为什么它不是任何人的错,并向您展示我们如何通过比较API行为来捕获bug(同时生成API规范!!)。

你在一个网络应用程序上工作。您的同事和#bff,Aki打开了从常用API中删除属性的拉取请求。你们两个关系很好,所以你们来回顾一下公关。Aki的公关包括一个链接,显示该属性的使用已从网站上删除,再次证明了为什么Aki是您的#bff。你热情地+1公关,你们两个都认为Aki已经考虑到了所有的依赖。

更改将合并。然后:背叛!现在移动客户端出现故障,您和Aki现在已经很晚了。(幸好你一开始非常喜欢Aki。)。事实证明,Aki的API非常好,以至于移动API已经开始依赖于移除的属性,而您和Aki都不知道。

如果这件事发生在你身上,那就不该怪你!这些bug都是令人讨厌的小东西:它们必须依赖于您编写的代码,而不是代码本身,这使得很难通过源代码差异来捕捉它们。事实上,bug一旦跨越API边界,就会变得极其难以捕获,因为它们避开了通用的测试和软件分析(考虑静态和动态分析)解决方案。开发人员只能依靠文档、口口相传和真真切切地祈祷。

要捕捉这些类型的bug,您只需安装Akita,以便在发出Pull请求时分析影响API的更改。以下是秋田在您的拉取请求上留下的评论示例:

Akita使您能够跨拉请求、多个环境(EX Production与Test),甚至是预先存在的规范来比较API行为。如果Aki使用Akita来比较他们的生产环境和测试环境之间的API行为,他们肯定会发现错误并为您省去一些深夜调试!

通过不同的行为而不是代码,Akita总结了拉取请求如何更改您的API,包括:

👷🏻‍♀️即将面世:受影响的客户端,准确告诉您哪些移动和网络客户端受到影响。

就在本周,我们发布了GitHub集成,可以洞察每个Pull请求。您现在可以在不更改任何代码或配置文件的情况下使用Akita,而无需代理-并且将其作为正常开发人员工作流程的一部分。

Akita通过向您展示隐式API契约之间的语义差异来实现这一点。换句话说,这意味着Akita会魔术般地找出您的API通常做什么,然后在这方面有所不同,而不是在源代码上进行语法上的不同。通过对观察到的行为进行区分,而不是代码本身或API可以相互调用的静态图表,Akita的报告可以更精确地指出潜在问题。Akita足够灵活,既可以在CI中运行(如下所示),也可以在生产环境中运行!

您可能想知道我们是如何做到这一点的,因为现有的Linter、静态分析或动态分析都无法做到这一点。在幕后,Akita分析API流量,从头开始构建API模型。作为基础,Akita为您的API构建了API规范。这里我们展示了Akita自动生成的OpenAPI规范:

下一步就是魔力从何而来。Akita使用高级编程语言技术不仅可以检测基本规范属性,还可以检测隐式API约定,例如,日期时间、电子邮件、电话号码等特定类型:

您所要做的就是设置Akita来监视您的API流量。无需更改代码,也无需代理:

我们刚刚在我们的私人测试版中发布了规范查看器和GitHub集成,希望您能尝试我们的规范生成和/或语义API行为差异。以下是您可以提供帮助的方式:

如果您对试用感兴趣,请注册我们的私人测试版!

您可能还会对我们上周在API spes会议上所做的演讲和演示感兴趣。

我们也在不断地努力使我们的工具变得更好!如果您对变更分析有疑问,请填写此调查-有机会赢得价值50美元的亚马逊礼品卡。

把我们的事散布出去!我们希望能得到所有的反馈!