API 格调是一个备受争议的话题,大多数开发者都相熟 REST 与 GraphQL 的争执,更不用说其余格调了。本文将介绍常见的 8 种不同的 API 格调。
API 有哪些格调呢?
依照不同的特色能够分为五类,如下:
- Web API:
REST
和so-called REST
- 查问 API:
GraphQL
- 公布订阅 API:包含
Kafka
和WebSub
- RPC API:
SOAP
和gRPC
- 一般的文件传输
束缚、属性
具体应用哪种 API 格调,个别须要思考束缚、属性和关键因素,这里不思考架构的影响因素。
思考以下束缚和属性之间关系的示例:
- 解耦(束缚)的 API 实质上是可批改的(属性)
- 无状态(束缚)的 API 实质上是牢靠的(属性)和可扩大的(属性)
- 实现对立接口(束缚)的 API 实质上是简略的(属性)
当然,束缚也会导致负面属性,例如,效率低下是一种可能由对立接口的束缚引起的。然而,要抉择正确的 API 格调,须要思考对我的项目团队因素(效率、品质、老本)。
要抉择想要的属性,须要思考团队的局限性。
- 业务限度:例如用例、客户要求、公布工夫
- 地区限度:例如地区政策限度
- 技能限度:例如团队文化、团队技能
- 复杂性限度:包含格调难度、可扩展性需要和算法复杂性
除了下面的思考因素,你可能发现要构建具备特定属性的 API,还有一些常见的思考因素,如可移植性、可见性和安全性。是的,上面的因素也是须要思考的:
- 性能
- 可扩展性
- 易用性
- 可修改性
- 可靠性
- 可发现性
- 易于开发
- 老本
和后面的因素相比,上面的因素不那么要害但又不得不思考:
- 成熟度
- 企业适用性
- 工具
- 社区
- 特定格调的资源
- 易于凋谢
抉择正确 API 格调的倡议:综合思考以上的因素就会晓得抉择哪种格调,但要做到这一点,还须要晓得常见的八种 API 格调在束缚、特色。
REST
REST(REpresentational State Transfer),首次呈现在 2000 年 Roy Thomas Fielding 的博士论文中,提出了一种万维网的软件架构格调 -REST(全称:Representational State Transfer,体现层状态转换),目标是便于在不同软件 / 程序中(例如互联网)中相互传递信息。它指的是一组架构约束条件和准则。满足这些约束条件和准则的应用程序或设计就是 REST 的。
束缚:客户端 - 服务器、无状态、可缓存、分层零碎、按需代码、对立接口
特色:性能、简略性、可扩展性、可见性、可移植性、可发现性、可修改性、可靠性
REST 非常适合构建长久的可扩大零碎。它也是一种绝对灵便和成熟的格调,因而实用于内容协商、多媒体和顶级身份验证等内容。
So-called REST
called 和 so-called 都示意所谓,区别在于,前者是名词性从句,后者是一个形容词,因而在 REST 的设计上次要在于端点的设计。
束缚:客户端 - 服务器、无状态、可缓存、分层零碎、按需代码、对立接口
特色:性能、简略性、可扩展性、可见性、可移植性、可发现性、可靠性
So-called REST 是大多数团队的首选,因为遵循 HTTP 协定并提供 REST 的所有属性,对立接口。可怜的是,没有这种束缚意味着 So-called REST 提供的可修改性很差。
GraphQL
GraphQL 是一个开源的,面向 API 而发明进去的数据查问操作语言以及相应的运行环境。于 2012 年仍处于 Facebook 外部开发阶段,直到 2015 年才公开公布。2018 年 11 月 7 日,Facebook 将 GraphQL 我的项目转移到新成立的 GraphQL 基金会。
束缚:客户端 - 服务器、无状态、分层零碎、对立接口
特色:易于开发、老本、类型平安
GraphQL 提供了令人难以置信的工具和杰出的开发体验,能够疾速设置和应用,并且能够很好地用于后端和前端的通信。它的倒退不如 REST。
Apache Kafka
Kafka 是由 Apache 软件基金会开发的一个开源流解决平台,由 Scala 和 Java 编写。该项目标指标是为解决实时数据提供一个对立、高吞吐、低提早的平台。其长久化层实质上是一个“依照分布式事务日志架构的大规模公布 / 订阅音讯队列”,这使它作为企业级基础设施来解决流式数据十分有价值。
束缚:客户端 - 服务器,无状态,对立接口
特色:性能、可见性、可扩展性、可发现性、可靠性、类型平安
Kafka 是一种风行的公布订阅格调,疾速、牢靠且可扩大。尽管它具备基于音讯的零碎的所有长处:永恒存储音讯,但它并不适宜作为开放平台公布,并且须要大量的 Java 性能。
WebSub
WebSub 是一种在互联网流传分布式公布 / 订阅的凋谢规范。这种协定为数据订阅延长了 Atom 和 RSS 协定。次要是为了提供即时更新告诉,这将改善客户端取得任意距离 feed 之状况。
束缚:客户端 - 服务器、无状态、可缓存、分层零碎、按需代码、对立接口
特色:简略性、可扩展性、可见性、可移植性、可发现性、可修改性、可靠性
WebSub 是另一种公布订阅 API 格调,从 REST 继承,即便在对外开放也能很好地工作,与语言无关。然而,性能必定不如 Kafka。
SOAP
SOAP 是替换数据的一种协定标准,应用在计算机网络 Web 服务中,替换带构造的信息。SOAP 为了简化网页服务器从 XML 数据库中提取数据时,节俭去格式化页面工夫,以及不同应用程序之间依照 HTTP 通信协议,听从 XML 格局执行材料调换,使其形象于语言实现、平台和硬件。
束缚:客户端 - 服务器,分层零碎
特色:可见性、可发现性
它可能不是最古代的格调,然而 SOAP 依然有它的用处。它非常适合在现有的企业基础设施上进行构建,特地是对于一对一的集成。然而,对于长期策略,肯定要思考其余格调。
gRPC
gRPC 是 Google 发动的一个开源近程过程调用 零碎。该零碎基于 HTTP/2 协定传输,应用 Protocol Buffers 作为接口描述语言。其余性能:认证 双向流 流控制 超时 最常见的利用场景是:微服务框架下,多种语言服务之间的高效交互。
束缚:客户端 - 服务器
特色:性能、简略性、可靠性、平安
gRPC 是一个由谷歌反对的根本 RPC 框架,尽管领有杰出的性能,但它保障了对 REST 或 GraphQL 曾经提供的大部分内容进行革新。它不适用于 web 应用程序,也不适用于音讯代理。
File Transfer
文件传输是指计算机文件通过信道从一台计算机传输到另一台计算机。在计算机历史上,针对不同的文件传输状况,人们设计了许多文件传输协定。
束缚:客户端 - 服务器
个性:易于开发,成本低
简略的文件传输很容易被忽视,不过这是一种便宜且简略的数据传输方式。非常适合不须要频繁的批处理,也不须要实时性能的场景。
总结
下面简略介绍了常见的 8 种 API 格调的束缚和特色,有一个大略的理解,后续将会开展具体介绍。