得物API一站式协作平台探索与落地
1. 现状
API文档作为公司研发重要的数据资产,承载了公司核心的业务逻辑,随着公司业务的复杂化,软件架构微服务化,公司数字化的发展,API的研发管理成为了公司研发的最重要的一个环节,而得物目前存在两个接口文档相关的平台:
文档管理平台-YApi
数据Mock平台-Mooncake
根据行业报告显示,开发团队大概有50%的工作时间是围绕着API开展的,目前在得物的研发流程中,围绕API文档的协同工作分散在不同的工具或者平台,导致现有的API在研发协同工作中低效流转。
API文档资源利用率低
YApi作为现有的文档管理平台,过度的管控、复杂的交互和混乱的分类导致现有的文档利用率非常低。根据数据统计,大部分的使用场景为上传文档、确认文档等。
API文档质量无法保障
围绕API研发流程割裂
3. 业务思考
文档驱动:服务端完成接口文档、测试用例,前端、客户端能够通过接口文档了解接口定义以及应该如何跟接口进行交互,各职能团队参照API文档独立完成需求研发。
测试驱动:每个迭代,交付的接口文档都通过测试保证文档质量,对于测试不通过的文档,则要持续的改进,最终保证文档交付。
沉淀API数据资产:沉淀具备业务价值分类的API接口文档资产,产生规模化业务价值。 测试驱动开发:同步自动化测试平台针对API的测试用例,提高API交付的质量。 实现数据Mock:基于API的数据Mock,提升前端、客户端的研发效率。 丰富文档能力:围绕API的使用场景,提供文档类型转换,接口调试能力。 降低沟通成本:基于消息通知机制,降低沟通噪音和信息复杂性,产品平台价值。
4. 解决方案
4.1 数据分类治理
项目分组:
记人员为A, 下面所获取的业务线为{[a, 80],[b,60], [c,10], [d, 5]}
记人员为B,下面所获取的业务线为{[a, 60],[b,30], [e,10]}
// 业务线a
weight_a = (80+60)/2 = 70
// 业务线b
weight_b = (60+30)/2 = 45
// 业务线c
weight_c = (10+0)/2 = 5
// 业务线d
weight_d = (5+0)/2 = 2.5
// 业务线e
weight_e = (10+0)/2 = 5
weight_a > weight_b > weight_c = weight_e > weight_d
通过对项目进行业务域的分组,可以更清晰的获取项目的相关业务属性。
默认选中用户归属业务域,降低用户获取信息成本。
接口分类:
手动创建分类,并维护一个类目映射关系,插件依然使用原来的上传逻辑。
废弃原来的分类,提供多级分类的能力。
支持原有数据的批量分类能力。
通过为用户提供灵活的多级分类能力,使得接口分类具备更深层次的业务能力,对于项目文档资产的沉淀,起到了很好了帮助。例如在门店项目中,我们能很清晰的理解接口的业务能力,如图所示:
4.2 提升文档利用率
基于文档的数据Mock
Mock空间的数据隔离:通过提供更灵活的私有场景集,和更稳定的公有场景集,保证了Mock数据的安全性和数据隔离。
Mock接口的多场景:同个接口提供不同的数据Mock场景,用户可以自己定义Mock场景数据,例如404场景,支付成功场景等,一键激活场景或者切换场景。
Mock插件的零侵入:目前市面上常见的Mock服务,要么自己在业务代码中编写Mock数据,要么提供的插件侵入工程的业务代码,Mooncake平台基于Chrome插件提供零代码侵入Mock功能。
基于文档的调试能力
目前对于接口的调试,大家还是常用Postman进行调试,配置URL和参数的过程还是比较麻烦的,文档变更之后,还不能及时的进行改变。Mooncake基于现有的文档数据,提供了调试功能,免去了配置出入参的麻烦,主要特性如下:
支持多环境配置:用户可以提前配置多套运行调试环境,例如开发,测试,生产等多种环境,一键切换调试环境。 免登陆配置:通过账号的配置,可以自动获取token,解决调试获取token的问题。 公共参数配置:配置公有header参数,减少接口配置次数,节约配置时间成本。 调试场景:支持远程调试和本地调试。
基于文档的转换能力
多文档类型支持:支持多种文档类型的数据转换,包括Schema 、JSON、Raw 类型等。
更精准的字段定义:根据字段的是否必填,在 TypeScript 中直接转换字段是否可选。
更多语言的支持:目前支持类型声明转换为TypeScript 、Java 、Swift 、Go 、Kotlin 、Dart 等。
4.3 提升接口交付质量
4.4 降低用户沟通成本
接口订阅:通过订阅关心的接口,可以实时收到接口的变化通知,一键查看接口变更。
历史版本:平台记录了接口变更的历史版本,可以很方便的查看当前版本与历史版本的区别。 群消息通知:平台增加了基于webhook的群消息通知功能,项目接口文档的增删改变化都能收到机器人的通知。
4.5 降低平台使用难度
前端工具:抽离前端代理SDK,服务与不同项目配置的代理插件,包含Webpack插件 、Vite插件、Umi插件、Chrome插件等。如图所示:
后端工具:
IDEA插件:提供交互式IDEA插件,降低代码侵入,增强对文档分类的约束。
Go命令行工具:基于社区的Go文档生成工具,将Yaml文件一键上传到指定项目。
本地调试工具:提供本地调试工具Chrome插件,解决本地调试跨域问题。
基本功能: 围绕API提供基本的功能,例如接口文档、接口测试、数据Mock等
解决方案: 围绕API的一些功能,为研发提供解决方案,如研发流程的管理、API的快速生成、接口编排、依赖信息变更等
降本提效: 基于API的扩展性方案,体验研发流程效率,降低生产成本,推动业务发展
5. 总结&思考
目前Mooncake平台已经实现文档的管理功能,后续平台的方向我们也在规划:完善Dubbo协议的支持和调试;定时扫描代码,实现文档的自动化更新;丰富文档依赖的上游信息,做到变更通知;接口编排实现业务数据的组装等。
*文/migor