API设计与开发实践第3篇 API 模型初探,从洋葱模型到细胞模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API设计与开发实践第3篇 API 模型初探,从洋葱模型到细胞模型相关的知识,希望对你有一定的参考价值。
API 现有模型
API 使用情景
从前文系列文章看 WEB API,无论是 HTTP API,还是 RPC API,都是一个服务单元。一般软件系统或者平台发布的 API 包含多个 API,这里就有一个 API 之间关系梳理的工作。
我们可以将常见 API 使用情景列出:
- API 既可以单独使用,也可以独立使用
- API 可以在容器内运行,也可以不使用容器运行
- API 可以是无状态的,可以操作状态数据
- API 可以有多个版本
- API 可以部署多个实例,支持均衡负载
- API 可以被击穿,也可以修复
- API 的限流、熔断等可以放在内部也可以放在外部,但放在外部更方便
洋葱模型(onion model)
对于 HTTP API 以及过滤器,网上常有人使用洋葱模型来进行描述。 ::: hljs-center 图片来自网络,原始出处不可考,有问题请联系作者 :::
这个图对于理解 HTTP API 方便,但描述不算完全准确。洋葱模型不是简单的层级模型,而是图关系模型。
https://en.wikipedia.org/wiki/Onion_model
可见,洋葱模型描述了 API 的实现,但没有描述 API 之间的组合关系,API 运行所处的宿主环境。 洋葱模型并不适合描述现在较为复杂的 API 服务体系。
原子 API 和分子 API
函数式 API 是 stateless API,与数据状态无关,固定的输入对应固定的输出。因此函数式 API 可以作为一种标准化的工业产品,用于组合生成 API 服务,构建软件系统。 当然, 使用有状态 API 也可以构建服务体系,只是并发、扩展等性能不如无状态 API 好。
网上也有说法,用原子 API(atom API)和分子 API(molecule API)来描述 API 模型。原子 API 可以独立提供功能服务,通过有机组合形成分子 API,对用户提供完整服务。 对于原子 API的组合,相同的组合就是相同的分子,不同的组合就是不同的分子,原子 API 及组合关系,就是分子 API 的特征。
虽然用原子和分子可以描述两种粒度的 API,但是对 API 模型的描述并不完整。 API 服务体系不是独立的,其运行往往还配合有网关,有缓存、数据库等状态数据,有消息队列等中间件。
API 细胞模型(cellula API)
梳理 API 关键信息
一个 API 从声明到实现到运行的路径中,包括以下关键信息:
- API 接口定义
- API 实现的源代码
- API 编译得到的可运行文件
- API 运行的容器定义
- API 打包生成的容器
- API 缓存
- API 通信
- API 网关
从以上信息来看,API 实现只是 API 服务中极少的一部分。要描述 API 模型,除了考虑 API 的静态结构,还必须考虑 API 的动态环境,而且后者更加重要。
原子和细胞的对比
原子是一种没有生命体的微观粒子,分析时只考虑化学成分,稳定性强,大多数在环境中不易发生变化。原子适合描述静态结构。
细胞体积比原子体积大得多,结构和功能都复杂,有细胞膜、细胞核、细胞器、细胞液等。细胞是一切生物体的组成根本,也是生命活动的主要承担者。细胞更适合描述动态结构。
细胞基本含义和 API 对照
细胞的定义来源于 https://yixue.com/细胞
细胞是基本生命单位, 单个 API 也是可以独立访问的单元。
对于简单的 API 服务,一个 API 就可以,比如IP查询、天气查询等。 对于复杂的 API 服务,需要多个 API 组合,比如购买一件商品,包含商品详情 API、订单 API、支付 API、仓储 API、物流 API等。
API 包括有状态的单体 API,运行的实例数量不会发生变化;也包括无状态的函数式API,可部署一个到多个,根据实际需要扩容和缩容。
由无状态函数式 API 组成的 API 服务是云原生 API。
无状态函数式 API,按照接口定义使用指定编程语言实现,有核心源代码。API 具有输入转换、输出转换、序列化、反序列化、堆栈内存访问、过滤器、异常处理等逻辑。
API 具有至少一个核心函数,可能具有多个协程。核心功能通过源代码区别,可以通过 diff 进行比对。
源码包括系统函数和开发者编写的函数。
云原生 API 服务体系(平台)有专门团队负责维护,不断完善改进。API 服务可以复用部署多个实例。
API 网关负责 API 通信、API 路由、API 代理,防御 DDOS。
Docker 容器提供 API 实现的运行环境,数据交换环境。
处理函数就是细胞核,用于处理满足预期特征的数据。
API 的数据存储空间。
操作系统的进程和协程,使用 CPU 时间和网络 IO。
专用的计算机硬件设备,解释执行更加底层的计算机指令,消耗电能,完成数据计算。
小结
不言而喻,API 服务体系是动态体系。使用细胞模型描述 API 模型,不论是对于 HTTP API 还是 RPC API,都可以找到对应的概念描述。
研发 API 的过程就是培养细胞的过程,API 的无感计算就是生物体的自然生长,API 服务体系最终会演变为云原生的“活体”服务。
以上是关于API设计与开发实践第3篇 API 模型初探,从洋葱模型到细胞模型的主要内容,如果未能解决你的问题,请参考以下文章
DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)
高焕堂:Android的API设计(应用篇)_创建App的对象