DDD落地之API文档化
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 个人介绍
• 李征 , 去哪儿网技术总监/业务研发技术委员会委员
• 去哪儿网机票C端前台服务负责人
• 持续专注于基于 API 治理的领域能力标准化、领域服
务治理、多租户理念的业务模型落地等工作。
• 致力于通过领域化、模型化、可感知来解决业务复杂问
题。期望以 DDD 领域驱动降低系统复杂度,提升团队
效能。
• 近期在BFF(服务于前端的后端)的实践思路中进行了
大量思考,希望推动业务服务接入简单化。
3. DDD落地之API文档化
让领域服务治理走向有迹可循
主讲人:李征 /去哪儿网
Qunar Engineering Director
4. CONTENTS 目录
DDD启示录
为什么需要API
用DDD来设计API
API标准化在Qunar的落地
5. DDD启示录
6. DDD-启示录
7. DDD – 启示录
8. DDD – 启示录
9. 领域模型边界表达
与可延续性
10. 软件开发~破窗效应
l脏代码
l测试
l没有测试
l混乱的测试代码
l难以测试
l混乱的源代码管理
l无序的部署方式
11. 亚马逊:“超级API”公司
Ø 从今天起,所有的团队都要以服务接口的方式,提供数据
和各种功能
Ø 团队之间必须通过接口来通信。
Ø 不允许任何其他形式的互操作
p 不允许直接链接
p 不允许直接读其他团队的数据
p 不允许共享内存
p 不允许任何形式的后门
p 唯一许可的通信方式,就是通过网络调用服务
Ø 具体的实现技术不做规定
Ø 所有的服务接口,必须从一开始就以可以公开作为设计导
向。
API标准化的
要求
Ø 不遵守上面规定,就开除
没有例外
12. API标准化的作用
尤其重要的是,要明确一个团队只在单一的限界上下文中工
作,别给其他团队机会去修改你的源代码,从而引发意外,你的
团队控制着源代码和数据库并定义了官方API,必须通过这些API
才可以调用限界上下文,这是使用DDD所能带来的好处之一”
-<领域驱动设计精粹>
13. API是什么
服务能力的具体体现
领域间交互的契约
领域内分层定义的描述
领域模型的具象化表现
14. 软件分析和设计经历了三个阶段的演进
• 单体架构
第一阶段 • 面向过程,数据驱动
• 集中式架构
第二阶段 • 面向对象,分层设计
2.5阶段
• SOA与远程调用
• 通过传统SOA或远程调用,实现初级的业务隔离,充分发挥康威定律。(大多在这个阶段)
• 分布式架构
第三阶段 • 采用领域驱动设计的方法,使用微服务架构模式
15. 领域模型边界表达与可延续性
16. 用DDD来设计API
17. 思潮:API-first
从前
将来
18. 用DDD设计API – 领域接口化设计
经典案例
对于银行行行的 API 来说,账户就是一一个领域对象(DDD 里里里的实体)。这次我们不不再使用用 CRUD 来为
账户建模,而而是为账户定义一一组业务操作。以下是一一系列列写入入操作:
•开户(Open)——新开一一个账户。
•销户(Close)——注销一一个已有的账户。
•取出(Debit)——从账户里里里扣掉一一些钱。
在定义好业务操作之后,就可以将它们与 REST API 映射起来:
•存入入(Credit)——往账户里里里存入入一一些钱。
•POST /account ——新开一一个账户。
•PUT /account/close ——注销一一个已有的账户。
•PUT /account/debit ——从账户里里里扣掉一一些钱。
•PUT /account/credit ——往账户里里里存入入一一些钱。
•GET /account/——通过账户 ID 加载相应的账户信息。
•GET /account/transactions ——列列出账户的交易易历史。
•GET /accounts/query/customerId/——列列出指定客户的所有账户。
19. API在Qunar的落地
QDoc
20. 落地 – 目标
所有的服务接口,必须从一开始就以可以公开作为设计导向,没有例外
项目开发流程织入
文档版本化
文档代码一致性
21. 效果
22. 文档化 – 路线图
感知到自然
流程融入
工具审视
规范定义
23. 规范定义 – 标准之争
一般的接口定
义规范
JavaDoc
• 适用于Java
• 一种文档过注
视方案
Wiki/Word
OAS
(OpenAPI-
Specification)
• 大多数在用
• 合同、协议使
用
• 标准的
• 语言无关的
• RESTful API 接口
规范
24. 工具审视
Swagger
eolinker
Postman
YAPI
其他
•
•
•
•
•
• 业界公认
可集成度高
商业应用
有一定知名度
开发常用工具
Workbanch方向发展
•
•
•
•
• Qunar开源项目
Apifox
smart-doc
showdoc
Orion-API-Manager
25. Qunar工具选择 - QDoc
OAS(OpenApi-Specification)
Qdoc – 自研
研发流程织入
从感知到自然
代码自动化(Doc2Code)
26. 流程融入 – 代码即文档
27. 流程融入 – 发布流程集成
28. 流程融入 – PMO(JIRA)集成
29. 代码自动化 – Doc2Code
效率
风格
治理
监控/
降级
30. 落地
规范
易用
治理
成熟度
31. API – 成熟度
推进API产业化
确立API的核心地位
埃森哲API
成熟度模
型
将API视为业务策略
有选择的开发
并确立API的
商业化战略
无计划的
开发
32. API – 成熟度
级别7:API
作为业务
API架构的七
级
成熟度模型
级别6:开放式
API
级别5:基于微服务架
构的私有API
级别4:面向服务的体系结构
级别3:基于组件的体系结构
级别2:非结构化集成
级别1:隔离的应用程序
33. 终话
34. 贝索斯:API宣言
Ø 从今天起,所有的团队都要以服务接口的方式,
提供数据和各种功能
Ø 团队之间必须通过接口来通信。
Ø 不允许任何其他形式的互操作
p 不允许直接链接
p 不允许直接读其他团队的数据
p 不允许共享内存
p 不允许任何形式的后门
p 唯一许可的通信方式,就是通过网络调用
服务
Ø 具体的实现技术不做规定
Ø 所有的服务接口,必须从一开始就以可以公开
作为设计导向。
没有例
外
Ø 不遵守上面规定,就开除
35.