微服务实践8-接口管理
API&ABI
应用编程接口(英语:Application Programming Interface,缩写作 API),又称为应用程序接口,就是软件系统不同组成部分衔接的约定。由於近年來软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的可维护性和可扩展性。
应用二进制接口(英语:Application Binary Interface,缩写作 ABI)与操作系统结合的特定硬件平台的规范。这是超越应用程序接口(API)的一步,API定义了从应用程序到操作系统的调用。ABI为特定的CPU家族定义了API加上机器语言。API不保证运行时兼容性,但ABI确实如此,因为它定义了机器语言或运行时格式。
在操作系统上为什么C语言的程序的可移植性差?就是因为二进制接口的原因。
软件研发业界由前人为我们总结了很多架构模式,指导与帮助我们解决系统架构上的问题。现在比较流程的架构模式有:微服务,事件驱动,CQRS等等。这些架构模式都都是基于分布式计算的概念提出的具体技术场景下的模式。分布式计算最大的特点就是会设计到跨主机,跨进程的通信。所以就有了API。
API帮助我们解决OOA过程中的SOLID的问题。所以,在软件设计过程中API的设计是不可或缺的。有了API在开发过程中就有可能团队间,开发人员间的信息不同步。在互联网上可以搜索到很多,基本上可以分为两类:
- Open API
对于国内的开发者来说,很多服务在初始阶段的时候都在考虑我的用户从哪里来,我怎么才能让用户容易的进入并试用我的系统?后来看到腾讯开放了用户认证接口,我们的开发人员就蜂拥上去,对接腾讯的认证接口。从那时开始各大流量提供的API就是我们的用户来源了。但是SNS提供的API以及现有的一些分享类网站提供的API,仅仅只是Open API中的一角,所能给开发者带来的想象空间,以及所能够产生的商业价值还是十分有限。这种基于大公司的大平台发布出来的用于各种用途的接口,以及这一类接口的管理平台。 - 开发用的API Portal
其实第一类里面包括这部分的功能。开发用的API Portal就是用来做API文档化以及提供测试,Mock的服务。这个只是Open API管理中非常小的一部分功能。
接口怎么管理?
接口管理(AMS、API Management System)为我们提供创建和发布WebAPI、访问控制、对外开放、监控、计费、报告等功能的管理系统。
功能划分与使用流程
AMS的功能可以分为以下几个模块:
- 网关
充当API前端的服务器,接收API请求,执行节流和安全策略,将请求传递给后端服务,然后将响应传递回请求者。网关通常包括一个转换引擎,用于协调和修改请求和响应。网关还可以提供诸如收集分析数据和提供缓存的功能。网关可以提供支持认证、授权、安全、审计和法规遵从性的功能。 - 报告和分析
监控API使用和负载(总命中率、已完成事务、返回的数据对象数量、计算时间和其他内部资源消耗量、传输的数据量)的功能。这可包括直接或通过高级网络管理系统发出警报来实时监视API,例如,如果API的负载太大,还可以包括分析历史数据(如事务日志)以检测使用趋势的功能。还可以提供功能来创建用于测试API端点的性能和行为的合成事务。由报告和分析功能收集的信息可以被API提供者用来在组织的整个持续改进过程中优化API提供,并且用于为API定义软件服务水平协议。 - 接口安全
为了接口服务的稳定性以及数据可见性的问题,接口管理工作必须支持安全管理。现在业界流程的API安全管理方式是OAuth2的方式进行管理。 - 接口生命周期
可以让研发团队更关注与业务的开发。接口生命周期管理帮助团队管理完成接口的设计、部署、发布和下线的整体流程。 - 开发用的API Portal
为团队间或者第三方提供API接口的文档,测试服务。将API发布后开发人员可以在这里看到接口的详细资料。使开发人员能够轻松地探索、测试、获取API密钥,并更快地进行创新。
在互联网上可以搜索到大神对于AMS的对比:
接口管理工具
接口管理用法
第一节中说明了接口管理的两种分类。在下面具体的说明开源版本的比较。这里使用几个方面对比:
- 私有化部署
因为最终目标为公司内部团队间沟通使用的系统。所以,必须选择开源的并允许自由使用的系统才可以满足要求。 - 使用便宜性
这里涉及界面是否可以方便的看到。并需要查看是否有比较完整的文档,方便之后遇到问题时查找并解决。 - 接口
方便与其他接口测试工具对接,方便数据的导入导出工作。导入导出的数据可能在其他地方使用。 - 社区
开源项目的支持情况。是否有很好的支持Bug Fix。
编号 | 名称 | 网址 | 私有化部署 | 便宜性 | 接口 | 社区 |
---|---|---|---|---|---|---|
1 | Rap2 |
http://rap2.taobao.org https://github.com/thx/rap2-delos |
MIT License | 方便简单 | 无 | 淘宝前端团队支持,有8个人,2269个星 |
2 | YApi |
https://yapi.ymfe.org https://github.com/YMFE/yapi |
Apache License2 | 方便简单 | 可以对接Swagger, postman, har | 去哪儿前端团队支持,有15个人,4398个星 |
3 | CrapApi |
http://api.crap.cn https://github.com/EhsanTang/ApiManager |
GPL3 | 方便简单 | 未知 | 个人开发,968个星 |
4 | Swagger | https://swagger.io | UI可以,但其他不可 | 方便简单 | 未知 | 商业公司 |
5 | Kong |
https://konghq.com https://github.com/Kong/kong |
Apache License2 | 方便简单 | 未知 | 商业公司,完备的API管理,支持RPC,支持K8S部署 |
使用实践
进本上面三个国产的接口管理系统,都可以满足基本的需求。但是,CrapApi是个人开发,更新频率不高。所以就不进行相关的部署并使用了。
因为之前在其他地方使用过Rap,所以一直对Rap2是存在一些好感的。所以就先开始部署Rap2。从Github地址中可以找到Rap2的docker-compose.yml文件,所以,直接下载文件进行docker部署。部署后发现没有界面,找了找原因还需要部署rap2-dolores,但是rap2-dolores没有docker部署,搞了很久把rap2-dolores进行docker部署之后,发现没有地方有默认用户名和密码。在代码中找了半天才找到,登录进去之后发现新建接口,接口测试都是有问题的。所以,提了Issue。就先下了。
开始部署YApi。在github上没有发现有Docker部署的方式,在网上找了一下,有位前辈已经帮YApi提供了Docker部署方案:https://github.com/branchzero/yapi-docker。简单的下载docker-compose.yml并运行。系统即可使用。
登录界面默认的用户名:admin@admin.com 密码:ymfe.org
登录后登录后我创建了一个接口,非常方便简单。
发送测试非常方便啊。还可以支持高级Mock,可以根据自己的业务设置返回数据的内容。
至此,个人感觉YApi的使用感受要比Rap2好的多。并且使用也方便很多。
参考:
应用程序接口 https://zh.wikipedia.org/wiki/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%8E%A5%E5%8F%A3
应用二进制接口 https://zh.wikipedia.org/wiki/%E5%BA%94%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%8E%A5%E5%8F%A3
Open API分析、实践和思索 http://www.infoq.com/cn/articles/open-api-practice
Top companies that featured in Leaders Quadrant for Full Life Cycle API Management 2018: Gartner https://www.dailyhostnews.com/magic-quadrant-for-full-life-cycle-api-management-2018-gartner/
Where API management is headed in 2017 https://www.ca.com/en/blog-highlight/api-management-headed-2017.html