AI 与智能化 API 治理的探索实践

news2024/11/17 13:28:41

7月 Eolink 受邀参加 QECon 2023 全球软件质量&效能大会(北京站)。Eolink CEO 刘昊臻,发表了主题为**「AI 与智能化 API 治理的探索实践」**的演讲,分享 Eolink 在 API 全生命周期中治理实践与 AI 结合的探索。

Eolink 作为国内 API 全生命周期解决方案的领军者,通过其独创的 DTDD(文档与测试驱动开发 )API First 理念,致力于打造一站式、智能化的 API 全生命周期解决方案,帮助企业提升研发效能,降低运维成本。本次演讲,围绕 API 全生命周期,从 API 治理的价值、治理体系、实践经验等方面,分享了 Eolink 在 API 治理的最佳实践,以及结合「AI+API」技术的革新应用。

在这里插入图片描述

之前我在公司里面主要负责产研和相关的技术管理的工作,在 2016年我发现随着微服架构和数据开放的趋势到来,API 的整个综合管理成本开始变得越来越大,并且围绕着 API 的全生命周期有非常多可以优化提效的点。

因此,我和团队在 2016年做了国内第一款结合 API 的设计、开发、测试等功能的 API 开源产品,后面逐步演化为我们现在的公司-Eolink。在过去的几年里面,我们一直致力于在国内推广 API first 理念,帮助企业和开发者更好的去利用 API 。

如今越来越多的企业开始关注 API 的治理等工作,因为很多公司现在能够做的基础建设,以及围绕着代码建设的 Devops 平台能力基本已经建设完成了,下一步就是更细的 API 以及数据的治理,希望能进一步的提升产研的效率以及产品的质量,甚至进行数据的变现。


API 治理为业务带来的价值

目前,API 在企业中扮演的角色越来越重要。首先是 API 的数量相比以前有了爆发式的增长,现在随便一个公司内部拥有上千个 API 是非常常见的。

  • IBM 调查报告显示,API 经济全球市场规模超过2.2万亿美元。开发API项目的公司数量预计将保持100%的同比增长。

  • Gartner 研究报告指出,API 生命周期管理市场2019年同比增长36%,超过17亿美元,其成为应用程序基础结构和中间件市场中增长最快的部分。

  • 艾瑞咨询《2020年中国人工智能API经济白皮书》提出,2019年人工智能API开放平台市场规模达104.1亿且正处于高速增长期,预计到2024年市场规模有望达到579.9亿。

其次是围绕着数量庞大的 API 又有着广泛的开放需求,不仅是对内部开放,还经常需要对外部合作伙伴或者是用户进行开放。

  • API 数量: DevOps、前后端分离的研发模式带动 API 数量大幅增长;

  • API 开放: 微服务架构改造带来大量 API 管理及开放需求;

  • API 安全: 数据安全、服务治理等诉求推动 API 管理成为 IT 系统的基础设施;

  • API 经济: 开放式企业、开放银行等行业领先实践推动 API 经济兴起。

要保证这些开放 API 的安全就变得非常重要,并且还要思考如何挖掘其中的经济潜力,让 API 成为业务增长的驱动力。

在这里插入图片描述

来自 Linux 基金会的数据显示 70~90% 的代码是由开源和第三方 API 来组成的,并且通过 API 产生的经济价值也变得非常巨大,许多政府和企业开始考虑将数据和服务进一步开放,因此就有了开放政务、开放银行、企业开放平台等概念。为了更好地发挥 API 的作用,许多公司开始将 API 纳入到 devops 的流程,希望通过这样的方式来加速 API 的生产以及利用。

下图很好地展示了 API 在整个 devops 的过程中包含哪一些阶段,从最开始的设计到开发测试,安全保障以及管理,以及对外暴露之后的可发现,可接入,可消费和可观测。

在这里插入图片描述

我们签约的证券公司都希望将内部的 API 进行规范化的治理,包括最基础的 API 资产的集中管理,并进行自动化的测试,然后将测试好的 API 快速发布到网关,再通过一些审批手段去控制调用方,或者将开放的 API 暴露给消费者,让他们能够更快的接入,从管理后台中了解到每个租户、每个 API 的使用情况。

小规模团队:提升 API 研发、测试效率

不同的团队规模和业务规模,对于 API 治理的需求也不太一样,比如对于 100人以下,或者 API 在 1000以内的小规模团队来说,最关注的是如何将 API 作为一个标准化的步骤来接入到现有的 devops 流水线中,提高围绕 API 的开发测试的效率。

比如,通过 IDE 的插件将代码注解或者是代码直接生成 API 文档,通过平台来生成接口的单元测试用例,并且能够组合成自动化的测试流程,方便每一次迭代的时候进行冒烟测试以及版本升级后的回归测试。同时,在不断的迭代中,管理 API 不同版本之间的差异,并且把报告同步到团队中。API 作为 devops 中的一个环节,可以补充现有的研发效能体系,并且进一步的提升产品的质量。

在这里插入图片描述

大规模团队:贯穿从开发到上线的 API 治理

对于更大规模的团队来说,单纯的 API 管理和测试无法满足复杂系统和架构的 API 治理需求,此时范围就会延伸到运维,并且将内外部的调用方管理,以及公司内部的协作流程也结合进来。

比如,在开发之前的接口设计阶段,就会进行更详细的接口评审,并且通过一些功能来约束 API 的设计规范,或者找出不符合设计规范的 API。

在开发阶段和代码仓库结合,通过自定义的代码模板,将 API 的设计统一转换为标准的开发框架,然后在此基础上再进行后续的开发。

在运维阶段,将已经测试好的 API 和网关结合,实现从开发环境到生产环境的发布。当然,这个过程中还有可能涉及到一些流程审批,避免因为发布不规范导致的 API 不可用。在生产环境还需要对 API 的运行情况进行监控,了解 API 的调用情况以及异常告警,并且将所有的消息都和内部系统进行打通,实现自动化的协作。

在这里插入图片描述

围绕着 API 的治理工作,其实并不比代码的管理要简单,是一个跨团队长流程的的系统性问题。


API 治理完整体系的理想形态

API 要治理,实际上要解决的是四大核心问题:

1. API 作为一种核心的数字资产,要如何进行有效的管理并提升可观测性?

像很多团队以前都是把 API 的资产管理在各种的零碎文档里,甚至有一些老旧的业务系统,连有什么 API 都不清楚。

因此,有效管理的第一个标准就是可持续,其次就是能完整的记录 API 的资产信息来提升可观测性。

2. API 贯穿开发测试和运维等多个环节,我们要如何去把不同的团队和现有的工作流加以优化,并提升它的迭代效率?

针对这个问题,我们在业内提出了dtdd,也就是文档和测试驱动 API 开发的专利实践,通过标准化的工具和流程来解决API迭代效率的问题。

3. API 作为核心的业务中间层,怎么样提升质量和安全性?

比如,通过自动化的测试以及 AI 的方式来提升测试的效率和覆盖率,或者通过网管等中间件对 API 进行安全控制。

4. API 是否可以作为一种商品进行商业化?

这个问题每个公司的情况不一样,是更偏公司战略和业务方向的,比如现在的 AI,是一个很好商业化的 API 商品。

在这里插入图片描述

Eolink 从 2017年开始研究如何解决这些问题,并且针对性的设计和开发了一系列的 API 工具平台。包括 API 快速生产、研发管理、自动化测试、网关、监控、开放平台等,实现对 API 的全生命周期覆盖。

在这里插入图片描述

如果把 API 全生命周期和 devops 进行结合,就可以得到如图所示的 API Devops 工作流。在这个流程中,API 的每个环节都有对应的工作项,并不断推动 API 以更易用、更规范、更安全的方向发展。

在这里插入图片描述


API 治理的实践经验参考

API 治理是一个跨团队长流程和深需求的挑战,一般我们会把治理的目标拆分成多个核心问题,并逐个解决,而最简单的拆分方式,就是按照 API 的生命周期划分成多个阶段,找到各个阶段中目前存在的问题并通过工具来解决。

在这里插入图片描述

我们将过去几年在客户中实践的经验整理成了一个 API 治理成熟度的模型,根据这个模型中的三层次,六阶段来分别判断,目前团队内部对于 API 的成熟度处在哪一个级别,以及可能存在什么问题。

在这里插入图片描述

从最佳实践来讲,我们服务的客户可以分为以下四种:

  1. 基于文档与测试驱动,并联动前后端测试团队,持续管理 API 资产并且提升 API 的研发效能。

在这里插入图片描述

  1. 将 API的自动化测试逐渐加强并集成到流水线中,实现随时测试以及持续测试。

在这里插入图片描述

  1. 将 API 的开发和上线环节打通,实现 API 的快速发布,并通过网关等产品进一步管理 API 的流量,提升 API 的性能,安全和稳定性。

在这里插入图片描述

  1. 将 API 的管理和监控、链路追踪等产品结合,实现线上故障的及时发现和告警,并增强 API 的可观测性。

在这里插入图片描述

实际的 API 治理操作流程

1. 设计和管理

在设计阶段,制定接口的文档规范,并且建立一个层次清晰的接口仓库,方便后续的管理,测试和发布工作。一般来说,会根据产品应用和服务等级别对API进行分组管理,如果公司更大一些,可能还会在此基础上有部门子公司等组织结构的层级。

然后会制定一系列的API开发规范,比如不同的项目可能存在不一样的开发规范,但在同一个项目内或者一个服务内的API应该是尽可能保持设计统计,方便后续的对接和维护。

同时,为了方便管理,一般也会通过Eolink Apikit将分布在不同工具中的零散的API文档、测试用例、数据结构等内容管理起来,减少后续沟通过程中的信息不对称。

在这里插入图片描述

  1. 开发阶段

一般会基于代码仓库来搭建自动化的流程,解决前后端接口开发和调试的问题。比如从代码注解里面动态生成接口文档,或者是从接口文档反向生成代码。当有了一篇文档就可以设计或者是生成一系列的单元测试用例和 Mock API。这个时候,前后端和测试团队实际上已经开始异步的协作,大家都围绕着 API 文档来工作。

因此,就会出现API和档在团队内部分享的需求,当 API 的设计有疑问或者在测试过程中发现缺陷等问题时,也可以通过评论等方式对 API 标注。

在这里插入图片描述

3. 在构建阶段

这个时候代码会上传到仓库,然后触发我们的平台,对整个项目进行快照,也就是创建一个版本。版本管理的作用非常大,我们经常需要对比不同版本之间的接口差距,或者是对某个版本的接口进行回归测试。如果发现接口的设计有问题,还可能需要进行回滚。

在这里插入图片描述

4. 自动化测试阶段

测试团队在日常工作中不断地根据测试场景来设计自动化用例,将多个接口串联成测试流程,并且在平台内管理好测试的数据,这样当版本提交时就可以触发对应的自动化测试,并且把报告发送到指定的位置,这整个流程下来就把接口的开发与测试给关联了起来,让测试可以随时进行。

在这里插入图片描述

5. 发布阶段

通过将 API 管理和网关进行结合,可以把 API 配置快速推送到不同环境的网关,减少因为导入导出配置或人工操作失误等原因带来的发布问题。

实际上一般在网关还会做最终的发布确认,或者是接入内部的开发平台来进行发布前的审批。后续网关会对 API 进行线上生命周期管理,比如对 API 进行负载均衡,用户健全,攻击防护等工作。

到这里,API 从设计到发布的流程就基本结束了。

在这里插入图片描述

在实际的 API 治理的过程中会有非常多的需求,我们整理了一张图,详细的标注了在研发和测试阶段各个目标下可能涉及的一些需求点,方便大家参考。

在这里插入图片描述


API 开源生态:覆盖开发测试与运维场景

为了进一步降低 API 产品的使用门槛,我们将过去几年在 API 行业的一些实践经验进行了总结并重新设计开发了两款开源产品,分别是开源的 API 管理测试工具 Postcat、开源的高性能 API 网关 Apinto,这两款产品结合可以覆盖大部分基础的 API 开发测试和运维的场景。

在这里插入图片描述

Postcat 定位为面向未来的下一代 API 开发工具。在 Postcat 上,我们可以去管理 API 文档,创建各种 API 测试用例。由于是插件架构,我们可以通过第三方插件和现有的产品结合,或者增强 Postcat 的功能来实现无限的拓展性。未来,我们还会逐步结合 AI 的能力,未来期望让 API 的设计,开发和测试在 Postcat 上面实现全智能化。

Postcat Github :https://github.com/Postcatlab/postcat

在这里插入图片描述

Apinto 是我们基于 go 语言,全自研并开源了一个支持多集群管理的超高性能 API 网关,可以帮助大家解决 API 流量管理中的性能、安全和稳定性问题。

值得一提的,Apinto 的性能非常优秀,在一台八核 8g 的普通服务器上,转发性能接近 7w qps,比 nginx 要高 100%,比 kong 高 70%,并且在高并发的情况下,还拥有更低的延迟和错误率。

Apinto 还自带了 UI 的控制台,让整个部署使用和维护的门槛都降到最低。

并且也采用了和 Postcat 类似的插件架构,这意味着产品里几乎所有功能都可以通过插件的方式来扩展。无论是进行二次开发,还是集成到公司内部,都会更加方便。

Apinto GitHub:https://github.com/eolinker/apinto

在这里插入图片描述


首个「AI+API」的产品化探索

行业首发!Eolink「AI+API」新功能正式发布!

1. 通过自然语言描述需求,AI 生成 API 文档、API 代码

我们从去年开始研究产品和 AI 之间结合的可能性,其中第一个结合点就是通过自然语言来描述需求,然后由 AI 来生成 API 的设计,并通过平台来生成后续的框架代码。

比如,我们可以在产品中描述要设计一个什么样的 API,或者需要设计一个什么样的系统,然后 AI 会生成对应的 API 文档,并且我们可以在平台中二次编辑并保存。

如果觉得生成内容不符合预期,还可以继续完善描述,让 AI 生成更准确的 API 设计。生成好了之后,可以通过我们平台来生成各种语言的框架代码,并在此基础上继续开发。通过这样的方式,可以快速批量的创建 API 并减少一部分的人工操作。

在这里插入图片描述

2. AI+API 生成单元测试用例

根据 API 的文档来生成单元测试的用例,这个场景比刚才的要复杂一些,首先需要分析 API 的含义和使用场景,然后根据 API 文档里的参数描述来分析出 API 可能的单元测试用例有哪一些,并且生成对应的测试数据。

在这里插入图片描述

生产出来的测试用例可以一键进行回归测试,或者通过 OpenAPI 的方式对接到流水线里面,在每一次迭代完成之后都触发回归测试。

3. AI+API 生成自动化测试流程

通过 API 的文档来判断 API 的关联关系,对 API 进行分组排序并实现数据关联,从而生成测试的流程。

在这里插入图片描述

上述的三个功能目前在进行小范围的用户内测,内测过程中,我们也发现了一些问题要改进。比如通用大模型 AI 由于缺少高质量的 API 的训练数据,没有办法完全理解 API 的使用场景,尤其是一些专业领域的 API,或者是基于内部需求而设计的 API,导致生成出来的 API 单元测试的用例覆盖不全,或者生产出来的正确率比较低,目前我们内测发现正确率在 30% 左右,后期依然需要一些人工进行修正。

在这里插入图片描述

另外就是在线的大模型,可能会有一些数据合规的风险,虽然测试用例的数据并不敏感,但不同行业的保密要求不一样,有一些可能没有办法连接外网,因此如果能够在规模稍小一点的离线模型上实现这个需求,使用场景会更广一些。我们预计在第四季度会有正式的功能发布,并且到时候也会逐步同步到开源产品里面。

感兴趣的小伙伴,感兴趣的小伙伴,欢迎关注我们 Eolink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

String trim方法,使用前需要判空

背景是接口导入时,部分字段因为手动录入可能误输空格,所以需去掉前后空格,这些属性为非必填,所以未校验非空,引发空指针异常。 代码类似这样,未判断是否为空,直接trim,导致空指针异常 Testpubl…

【JVM】运行时数据区——自问自答

Q:Java 运行时数据区解构,哪些数据线程独占,哪些是线程共享?每个区域会产生GC和异常吗? 运行时数据区: 1、PC寄存器 2、堆区 3、JVM栈 4、Native栈 5、方法区 其中,PC寄存器、Native栈、JVM栈是线程独占的…

【Spring专题】Spring之Bean生命周期源码解析——阶段四(Bean销毁)(拓展,了解就好)

目录 前言阅读建议 课程内容一、Bean什么时候销毁二、实现自定义的Bean销毁逻辑2.1 实现DisposableBean或者AutoCloseable接口2.2 使用PreDestroy注解2.3 其他方式(手动指定销毁方法名字) 三、注册销毁Bean过程及方法详解3.1 AbstractBeanFactory#requir…

python列表笔记,python列表用法及基础操作

列表的介绍 定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗? 答: 列表 一、列表的格式 定义列的格式:[元素1, 元素2, 元素3, ..., 元素n] 变量tmp的类型为列表 tmp [xiaoWang,180, 65.0] 列…

数模论文写作细节要求

目录 优秀论文必要条件 数学建模的基本思路 第一步:了解问题——查文献、找数据 第二步:阐述要解决什么问题、用什么方法 其余步骤:给出数学模型、计算求解、对比结果与真实情况、应用于现实问题。 使用某种数学方法的理由和依据 创…

【SAP-MDG】MDG配置-配置工作流任务 Configure Workflow Tasks

一、配置工作流任务的前提: 1.工作流能启动的常规设置已设置完毕;(前面提到的内容) 2.配置目录:SPRO→SAP NetWeaver→Application Server→Business Management→SAP Business Workflow.(SPRO→SAP NetW…

Splashtop:适合旅行办公人士的远程工作解决方案

无论是重要的商务旅行,还是旅游度假,还是数字游牧生活方式的诱惑,许多人都会发现自己在机场贵宾室制作演示文稿,在古雅的咖啡馆参加虚拟会议,或者在偏远海滩的宁静背景下集思广益。 随处远程办公的生活让人向往。尽管…

5G科技防汛,助力守护一方平安

“立秋虽已至,炎夏尚还在”,受台风席卷以及季节性影响全国多地正面临强降水的严峻挑战。“落雨又顺秋,绵绵雨不休”,正值“七下八上” 防汛关键时期,贵州省水文水资源局已全面进入备战状态。 为确保及时响应做好防汛抢…

Linux SIGCHLD信号

在子进程结束之后,会默认给父进程发送SIGCHLD信号。 有以下代码: 编译并运行以上代码: 可以看到在子进程结束之后,将SIGCHLD信号发送给了父进程,然后输出SIGCHLD信号的代号17。 在后台运行以上代码并查看进程信息&am…

IDEAdebug调试时查看时间戳和Date类型的对象,格式化为yyyy-mm-hh

平时debug时遇到Date或者时间戳时看时间不好判断到底是几月几号,希望直接格式化为想要的格式 比如 下面,Date直接显示为 yyyy-mm-hh的格式 解决方案: 无需下载插件,如图 //Date格式化 return new SimpleDateFormat("…

SIP网络音频模块SV-2401V网络对讲音频模块(支持POE)

功能和特点 音频工作方式: 音频解码:即音频播放。接收来自网络的音频流,经过模块解码后通过线路输出高质量音频信号。目前支持可以播放以下音频格式:MP3、WAV (PCM IMA ADPCM)、G.711、G.722等,可以播放最高48k采样率…

汽车租赁管理系统/汽车租赁网站的设计与实现

摘 要 租赁汽车走进社区,走进生活,成为当今生活中不可缺少的一部分。随着汽车租赁业的发展,加强管理和规范管理司促进汽车租赁业健康发展的重要推动力。汽车租赁业为道路运输车辆一种新的融资服务形式、广大人民群众一种新的出行消费方式和…

每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)

今日份题目: 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…

全网最全的IntelliJ IDEA中快捷键大全,JetBrains公司IDE工具Windows快捷键大全,idea、pycharm快捷键大全

文章目录 前言零、工具的优点0.1快速修复0.2代码自动补全0.3实时模板0.4显示历史版本0.5调试功能 一、Ctrl二、Alt三、Shift四、Ctrl Alt五、Ctrl Shift六、Alt Shift七、Ctrl Shift Alt八、其它 前言 工欲善其事必先利其器,JetBrains公司IDE工具为我们的开发…

用友U8+CRM 任意文件上传+读取漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞,攻击…

7zip分卷压缩

前言 有些项目上传文件大小有限制 压缩包大了之后传输也会比较慢 解决方案 我们可以利用7zip压缩工具对文件进行分卷压缩 利用7zip压缩工具进行分卷压缩 查看待压缩文件大小 压缩完成之后有300多M,我们用100M去进行分卷压缩 选择待压缩的文件夹,右…

Python几何计算库读取几何,点线面要素游标搜索

Python几何计算库读取几何,点线面要素游标搜索 一、读取几何 要素类中的每个要素都包含一组用于定义面或线折点的点要素,或者包含单个用于定义一个点要素的坐标。可以使用几何对象( 面 Polygon、 折线 Polyline、 点几何 PointGeometry 或 多…

性能比较 - Spring Boot 应用程序中的线程池与虚拟线程 (Project Loom)

本文比较了 Spring Boot 应用程序中的不同请求处理方法:ThreadPool、WebFlux、协程和虚拟线程 (Project Loom)。 在本文中,我们将简要描述并粗略比较可在 Spring Boot 应用程序中使用的各种请求处理方法的性能。 高效的请求处理在开发高性能后端…

Datawhale Django后端开发入门 Vscode TASK02 Admin管理员、外键的使用

一.Admin管理员的使用 1、启动django服务 使用创建管理员之前,一定要先启动django服务,虽然TASK01和TASK02是分开的,但是进行第二个流程的时候记得先启动django服务,注意此时是在你的项目文件夹下启动的,时刻注意要执…

安装Google cloud时出现错误如何解决

在安装Google cloud出现错误 找到这个路径下的文件,并将其删除。 C:\\Users\\Administrator\\AppData\\Roaming\\gcloud\\configurations\\config_default删除后,重新运行安装程序,问题解决!!!