对内 DDD 对外 API 之—对外 API 的设计理念

关于旅游的数据接口API(去哪儿 NodeJs版API) 去哪儿 NodeJs版API 本项目通过采集去哪儿网的部分数据,制作模拟了一部分的api接口。 提供给大家测试学习! 适用者 想写个小项目练手又苦于没有完整的数据源的同学们。 工作原理 nodjs爬取数据,存入MongoDB数据库,通过路由使用接口。 注意: 该项目开源,已部署在服务器上,可以直接调用接口。 只有热门地区的数据,其他地区的数据没弄,但是足够个人练习开发了。 线上地址:http://... 阅读详情

2017年2月加入去哪儿网。目前专注于领域服务治理、基于API治理的领域能力标准化。致力于通过领域化、模型化、可感知来解决业务复杂度。期望用DDD驱动,降低系统复杂度,提升团队效能。

前言

对内 DDD,对外 API 是去哪儿网机票目的地事业群业务研发团队2020年 Q3 重点推出的业务重塑架构设计理念。在2020年 Q3,去哪儿网在过往的基础上,在 API 标准化这个领域做出了一些进步,这篇文章主要就是把这方面的经验和大家分享一下。

什么是对内 DDD,对外 API 呢,这个是我们业务研发领域内使用 DDD 作为领域设计、微服务设计的理念的实践原则,领域间使用 API 进行交互的一种通俗易懂的说法。

1 去哪儿网 API 发展的历史简述

去哪儿网在 API 领域其实有不少成熟的工具,常用主要包括 wiki、YAPI 和 swagger。

wiki 是去哪儿网最为传统的 API 承载工具,公司较早出现的公共平台,如支付中心,所提供的标准 API 就全部是通过 wiki 的方式呈现出来的。wiki 的优点是自由度相对较高,不受到各种规范的约束,修改也比较随意,可以非常个性化的去满足某些接口阅读者的诉求,天然的安全性较好,非公司内员工没有权限进行访问。缺点就要更多一些,例如因为没有一定的接口规范进行约束,接口的定义方式五花八门,有各种非常个性化的约定方式,相同的约定方式,呈现方式也不一样,有的倾向于给出嵌套式的呈现,有的则倾向于给出模块化的呈现,接口定义与接口之间的同步全部依赖规范和工程师的自觉,极易出现 wiki 与代码不匹配的情况。

正因为如此,我们可以说从提供 API 的角度看,wiki 可以提供可读性较好的 API 但是 wiki 不能提供可信、可靠的 API。

在去哪儿网起到支撑作用的第二个解决方案是 YAPI,YAPI 兴起的背景是从2016年开始的前后端分离架构。前后端分离使得前端工程变得更加独立。YAPI 也在2018年成为了去哪儿网的开源项目。YAPI 作为前端同学开发的接口平台直到现在仍然是去哪儿网 API 解决方案中的基石之一。YAPI 的作用用一句话来表述就是“共同维护一份接口定义,并连接前后端”。

YAPI 与 wiki 的区别可以用下图来表示:

 

从上图可以看出,YAPI 通过支持打桩测试这个抓手,通过运行 API 接口,测试能否得到预期中的结果来倒逼文档与接口定义一致。这个实现方式十分的巧妙,但是也十分依赖测试环境的完善以及对 API 测试的硬性要求,如果这两者得不到保障,那么这么巧妙的一个模式最终造成的结果仍然是接口与接口文档的分类和不同步。与用 wiki 差别不大,只是 YAPI 拥有着更加符合 RestFul API 规范的接口管理平台,这点与 wiki 相比对 API 的定义是一种约束。

为了防止接口定义与接口不同步(文档与代码不同步),后端同学引入了用于与代码使用 annotation 方式绑定在一起的 swagger,并且在 swagger 的基础之上做了一些基于 maven 的扩展,使得通过 swagger 编写的规范能够通过 maven 命令和发布等工程状态变化将接口的变化更新到 YAPI 平台,解决接口文档与接口实现不匹配的问题。

swagger -> YAPI 取得了一定的效果,但是因为使用 swagger 来编写 API 文档的工程比较少,并且少有人知道有 swagger -> YAPI 这个工具,使得 swagger -> YAPI 这种方式并没有在公司内部推广开来使用。

2 去哪儿网推进 API 标准化建设的原因

2020年因为疫情的原因,去哪儿网开始了轰轰烈烈的“练内功”行动,这其中就包括核心业务领域的业务 DDD 重塑、硬件成本节约、API 内部实现重构等。

做这几件事情的时候我们面临了一些困难:

1、DDD 重构需要与领域外通过接口进行调用,那么一个领域与外部领域之间提供多少接口比较合适呢?10个?30个?50个?如果提供的 API 过多,是否意味着 API 不够标准,质量不够高呢?

2、硬件成本中包括实体机&虚拟机节点成本和离线日志、实时日志成本,那么实体机虚拟机节点多少是比较合适的?系统的离线日志、实时日志产出多少又是合适的?这部分很依赖系统 API 的数量以及 API 访问量的提供。

3、API 内部功能重构后,哪些下游访问了这个 API?在使用诸如 QueryDiff 等工具对接口本身进行回归之后,出于保险起见需要对哪些下游系统进行回归测试呢?这方面就很依赖于 API 的上下游关系的治理,而想实现基于治理结果的自动化测试则依赖 API 的标准化。

通过上面几个例子我们看到,API 重新成为重要的技术改进点是整体上对内 DDD,对外 API 系统架构理念的需要,是硬件成本管理的需要,是平台化服务重构的需要。

 

3 API 标准化的理论基础

API 标准化的理论基础来自于 Jeff Bezos 2002

对内 DDD 对外 API 之 对外 API 的设计理念 2017年2月加入去哪儿网。目前专注于领域服务治理、基于API治理的领域能力标准化。致力于通过领域化、模型化、可感知来解决业务复杂度。期望用DDD驱动,降低系统复杂度,提升团队效能。 前言 对内 DDD,对外 API 是去哪儿网机票目的地事业群业务研发团队2020年 Q3 重点推出的业务重塑架构设计理念。在2020年 Q3,去哪儿网在过往的基础上,在 API 标准化这个领域做出了一些进步,这篇文章主要就是把这方面的经验和大家分享一下。 什么是对内 DDD,对外 API 呢,这个是我们业务研发领域内使用 阅读详情

相关推荐

使用DDD指导业务设计的一点思考

领域驱动设计(DDD) 是 Eric Evans 提出的一种软件设计方法和思想,主要解决业务系统的设计和建模。DDD 有大量难以理解的概念,尤其是翻译的原因,某些词汇非常生涩,例如:模型、限界上下文、聚合、实体、值对象等。 实际上 DDD 的概念和逻辑本身并不复杂,很多概念和名词是为了解决一些特定的问题才引入的,并和面向对象思想兼容,可以说 DDD 也是面向对象思想中的一个子集。如果遵从奥卡姆剃刀...

IDEAL Garden 1128

DDD进阶_DDD分层架构、整洁架构、六边形架构

DDD从入门到精通,系列文章传送地址,请点击本链接。 本文主要讲解微服务不同架构下的特点,如果还不了解DDD分层架构的,请先学下DDD的分层架构整洁架构又名“洋葱架构”。为什么叫它洋葱架构?看看下面这张图你就明白了。整洁架构的层就像洋葱片一样,它体现了分层的设计思想。在整洁架构里,同心圆代表应用软件的不同部分,从里到外依次是领域模型、领域服务、应用服务和最外围的容易变化的内容,比如用户界面和基础设施。整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越低,代码级别越高,越是核心

日积月累,水滴石穿 5732

车载通信技术原理-CAN通讯和代码配置:奥迪A6轿车总线拓扑图

CAN总线是一种用于汽车监测与控制系统的串行通信协议,由德国Bosch公司开发。它具有多主工作方式、优先级仲裁、高抗干扰等特点,支持点对点、广播等多种通信方式,传输距离可达10公里。CAN协议采用差分信号传输,物理层使用双绞线,数据链路层实现错误检测、位填充等功能。协议帧类型包括数据帧、遥控帧、错误帧等。CAN总线自1986年发布以来,已成为汽车电子系统的标准配置,广泛应用于车载网络。文章还提供了S32K144芯片的CAN驱动代码示例。

擎天柱工坊 1069

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 336

从2D到3D地图开发:手把手教你用Cesium+Three.js实现卫星轨迹可视化(含代码片段)

本文详细介绍了如何结合Cesium与Three.js实现从2D到3D的卫星轨迹可视化。通过对比传统Web GIS框架的局限,阐述了Cesium处理三维地理与轨道数据、Three.js负责高级图形渲染的分工优势,并提供了从环境搭建、坐标同步到动态粒子效果实现的完整代码实战指南。

nut55的博客 673

Android 编译系统(Build System)剖析

make是一种自动化构建工具,通过读取Makefile将源代码自动编译为可执行程序和库文件。

虎哥LoveDroid 2170

【Qt】QtCreator远程部署、调试程序

1)QtCreator 工具–> 选项 --> 设备 --> 添加2)设备设置向导选择–> Generic Linux Device --> 开启向导3)填写“标识配置的名称”(随便写)、设备IP、用户名 --> 下一步4)选择配对秘密文件,第一次配对,可以不填写,点击“下一步”5)点击“完成”6)设备添加成功,需要再配置SSH端口号、用户名、密码等7)保存SSH登陆密码:验证类型选择默认“Default”–> “创建新密钥”–> “Test”

郭老二 5194

Python 爬虫实战:雪球用户数据爬取与投资行为分析(含 API 签名算法解析)

雪球作为国内领先的投资者社区,拥有丰富的用户数据和投资信息。通过爬取雪球用户数据并进行分析,我们可以深入了解用户的持仓偏好、交易行为和投资策略,为企业和投资者提供有价值的市场洞察。

yansideyucsdn的博客 2248

《网络安全自学教程》- Windows基线检查加固

Windows安全配置,基线检查标准,基线加固方式

wangyuxiang946的博客 1万+

华为OD机试真题 新系统 9月20号 【字符串分组求和】

华为OD新系统机试真题【字符串分组求和】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串分组求和】解析。

qq_45776114的博客 627

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 这样Debug,排查问题效率大大提升...
下一篇: 阿里P8大神讲解的跳跃表确定不了解下?
java_lujj
博客等级 码龄4年 18粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值