API 组合模式——在微服务世界中提供统一的数据视图
实现API组合模式:同步组合(API Gateway聚合) vs 异步组合(CQRS视图) vs 客户端组合→GraphQL作为组合层→性能考量→缓存策略→部分失败处理→组合爆炸问题
你是API架构师
你的微服务架构中,每个服务有自己的数据库和API。但前端需要一个"用户个人主页"数据,包括用户信息(UserService)、最近订单(OrderService)、推荐商品(RecommendationService)。如果让前端调3个API,前端太复杂。你需要在服务端做"API组合"——一个请求,服务端聚合多个服务的数据。
API 组合模式
%%CB0%%<br> GET /user-profile/123 → Gateway:<br> await Promise.all([<br> userService.getUser(123), // 100ms<br> orderService.getRecentOrders(), // 150ms<br> recService.getRecommendations(), // 200ms<br> ]);<br> total: 200ms (不是450ms,因为是并行!)<br> %%CB1%%<br> user_profile_view 表:<br> 字段来自 UserService + OrderService + RecommendationService<br> 每次相关事件发生时更新对应字段<br> %%CB2%%graphql<br> query UserProfile($id: ID!) {<br> user(id: $id) {<br> name<br> avatar<br> recentOrders(limit: 5) { id amount }<br> recommendations(limit: 3) { id title }<br> }<br> }<br> %%CB3%%
输出格式
一、组合需求
前端类型: {Web / iOS / Android / 多端}
需要聚合的服务: {___个: [服务A, 服务B, ...]}
前端对延迟的容忍度: {低延迟关键 / 1-2秒可接受}
二、API组合方案(方式选择+聚合实现+缓存+降级策略)
三、关键代码实现
🎯 开始使用
描述你的API组合需求: