推荐阅读内容:
- 数据交互优化:前后端协作新思路
- 接口聚合服务:提升开发效率的利器
- 后端与前端的数据沟通桥梁
在服务拆分后的软件开发环境中,前后端团队常常会就API粒度的问题产生争论。前端团队倾向于数据组装处理由他们完成,而认为后端团队应专注于提供基础业务领域API服务能力。这种分歧在开发过程中屡见不鲜。
接口聚合服务的出现为这一难题提供了一种解决方案。
什么是接口聚合服务?
接口聚合服务是一个中立的协调者,主要职责是汇集前端所需的多接口数据,并将其整合后一次性返回给客户端。这一服务的设计旨在让前端能够更便捷地获取数据,同时也让后端能够继续专注于其核心业务领域API的服务提供。
接口聚合服务的场景应用
- 场景一:串行数据获取。例如,需要通过商品ID先获取评论信息,再通过评论中的uid获取用户信息。
- 场景二:并行数据获取。例如,同时通过商品ID获取商品信息、商品活动信息以及当前用户已购信息。
针对以上场景,我们选择了方案A,即通过自研一套简单的接口聚合中间层来解决问题。
由此,接口聚合服务——api-aggregator应运而生。
api-aggregator的特点
- 轻量级实现:核心代码规模控制在一千行左右,保证了其轻量级和易维护性。
- 无侵入性:api-aggregator对现有代码无影响,无需对现有服务和代码进行改造适配,即可直接使用现有接口。
- 高拓展性:提供了ApiAggregatePostProcessor扩展点,可方便地干预接口聚合的各个阶段。
- 前端友好:前端开发人员可以自定义返回数据结构,支持字段动态选取,以更好地满足前端开发需求。
- 灵活配置:接口聚合逻辑通过配置文件与api-aggregator进行交互,新增聚合接口无需发布新的版本。
api-aggregator的工作原理
Api-aggregator将接口聚合过程分为两部分:ApiDefinition(接口元信息)和ResponseDefinition(接口间聚合逻辑)。
ApiDefinition直接从HttpRequest中获取参数,而ResponseDefinition则描述了接口间的聚合逻辑。通过这两部分的配合,api-aggregator能够灵活地满足前端的各种需求。
api-aggregator还具备配置文件预加载、简化http请求模型等功能,进一步提高了其易用性和性能。
在api-aggregator中,无论是串行还是并行数据获取场景都被简化并统一处理。它能够根据接口的依赖情况给出最优的HTTP请求流程,提高接口聚合的效率。
为了 future 的拓展性,api-aggregator提供了ApiAggregatePostProcessor以供后续扩展。虽然添加新Processor时需要重启api-aggregator,但考虑其作为流量集中点的特性,未来版本可能会引入Groovy脚本以支持动态开启和停用Processor。