如何合理组织OpenAPI生成的客户端代码?内部场景选型探讨
内部场景下OpenAPI客户端代码生成的两种模式及延伸讨论
两种核心使用场景
1. 服务型客户端(Service Clients)
- 生成的客户端代码与特定服务的OpenAPI完全绑定,覆盖该服务的全部API
- 由负责服务端代码的同一开发团队管控维护(按需更新生成代码)
- 无代码重复问题
2. 用例依赖型客户端(Usage Dependant Clients)
- 每个用例仅基于自身实际调用的端点生成专属客户端,体积更小
- 由负责该特定用例的业务团队自行维护
- 不同用例生成的客户端间可能存在大量代码重复
两种方案核心对比
| 评估维度 | 服务型客户端 | 用例依赖型客户端 |
|---|---|---|
| 维护归属 | 服务端维护团队 | 用例所属业务团队 |
| 代码重复情况 | 无重复 | 存在大量重复 |
| 客户端依赖关系 | 存在跨团队依赖 | 无跨团队依赖 |
| 客户端代码稳定性触发点 | 服务端升级客户端版本时 | 用例自身更新客户端时 |
| 基础URL配置 | 单个客户端对应单一基础URL | 可按端点(或端点组)配置 |
| 技术栈/语言依赖 | 依赖服务端技术栈 | 依赖用例自身技术栈 |
对外场景的类比
对外提供API时也存在类似逻辑:
- 仅发布OpenAPI规范,支持使用者生成用例依赖型客户端
- 发布官方客户端库,对应服务型客户端模式
- 两种模式并非互斥,可同时提供
待讨论问题
目前聚焦内部使用场景(服务提供者与使用者均明确服务划分规则),有两个疑问:
- 针对上述两种场景,是否还有遗漏的评估论点?
- 是否存在第三种未提及的使用场景?
个人目前倾向于内部采用用例依赖型客户端,原因是可以将生成的客户端代码作为完全透明的调用层,仅以OpenAPI规范作为跨团队的沟通基准。
内容的提问来源于Stack Exchange,提问作者Lee Elenbaas
相关产品推荐
相关产品推荐

