API相关范式
参考:
介绍
应用编程接口(API, Application Program Interface),是一组用于构建和集成应用软件的定义和协议,使不同的应用程序之间能够相互通信。
API 架构通常从客户端和服务器的角度来解释。
REST
REST 是数据作为资源可用。
表述性状态传递(REST, REpresentational State Transfer),REST API(RESTful API)是指遵循某些 REST 体系结构约束的 API。
它使用标准方法和 HTTP 协议。它基于无状态、客户端-服务器架构和可缓存等原则。
 | 
 | 
主要概念和特征:
- 资源:一切都是资源,资源由 URI 标识。
 - CURD 操作
 - HTTP 方法
 - 状态码:
- 2xx:认可和成功
 - 3xx:重定向
 - 4xx:客户端错误
 - 5xx:服务器错误
 
 - 无状态:客户端到服务器的每个请求必须包含理解和处理该请求所需的所有信息。服务器不应在请求之间存储有关客户端状态的任何信息。
 - 客户端-服务器
 - 可缓存
 - 分层系统
 - HATEOAS
 
满足下面那条件和原则的应用程序就是 REST 的:
- 资源:一个 URI 就是一个资源。
 - 表现层:资源可以有多种展现方式,而把实体展现出来就是表现层。如一个文本信息,可以输出为 html, json 等。
 - 状态转化:HTTP 协议里,四个表示操作方式的动词 GET, PUT, POST, DELETE 它们分别表示四种基本操作。
 
综上所述,REST 架构:
- 每一个 URI 代表一种资源
 - 客户端和服务器之间,传递这种资源的某种表现层
 - 客户端通过四个 HTTP 动词,对服务器资源进行操作,实现表述性状态转化。
 
API 要被视为 RESTful API,必须遵循以下标准:
- 客户端-服务器由客户端、服务器和资源组成,并且通过 HTTP 管理请求。
 - 无状态客户端-服务器通信,即 GET 请求间隔期间,不会存储任何客户端信息。
 - 可缓存性数据:可简化客户端-服务器交互。
 - 组件间的统一接口:使信息以标准形式传输。这要求:
- 所请求的资源可识别并与发送给客户端的表述分离开。
 - 客户端可通过接收的表述操作资源,因为表述包含操作所需的充足信息。
 - 返回给客户端的自描述消息包含充足的信息,能够指明客户端应该如何处理所收到的信息。
 - 超文本/超媒体可用,是指在访问资源后,客户端应能够使用超链接查找其当前可采取的所有其他操作。
 
 - 组织各种类型服务器的分层系统会参与将请求的信息检索到对客户端不可见的层次结构中。
 - 按需编码:能够根据请求将可执行代码从服务器发送到客户端,从而扩展客户端功能。
 
REST 的优点:
- 解耦客户端和服务器
 - 可发现性
 - 缓存友好
 - 多种格式支持
 
REST 的缺点:
- 没有单一的 REST 结构
 - 大的有效载荷
 - 过度和不足的问题
 
REST 的用例:
- Web 服务
 - 简单的资源驱动应用
 - 单页应用程序
 
RPC
远程过程调用(RPC, Remote Procedure Call),为了让计算机能够根调用本地方法一样去调用远程方法。是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC 跨越了传输层和应用层,使得开发网络分布式程序在内的应用程序更容易。
RPC 只是一个概念,但有很多规范和具体的实现。如 gRPC, Dubbo, Thrift, JSON-RPC 等。
业界普遍的做法是,内部系统之间调用使用 RPC,对外使用 REST。因为内部系统之间调用可能会很频繁,需要 RPC 的高性能支撑。对外使用 REST 更通用和易于理解。
 | 
 | 
主要概念和特征:
- 定义:RPC 允许程序使子例程在另一个地址空间执行。这就像调用在与调用者不同的机器上执行的函数。
 - 存根
 - 默认同步
 - 语言中立
 - 紧耦合
 
RPC 的优点:
- 直接和简单的交互
 - 易于添加的功能
 - 高性能
 
RPC 的缺点:
- 与底层系统的紧密耦合
 - 可发现性低
 - 功能爆炸
 
RPC 的用例:
- 命令 API
 - 内部微服务和客户特定 API
 - 分布式系统
 - 网络文件系统:如 NFS
 
GraphQL
GraphQL 只查询需要的数据。
GraphQL 是一种专门为 API 开发的查询语言。它只是为了优先为客户端提供锁清秋的确切数据。它旨在提高 API 速度和灵活性,并便于开发人员使用。作为 REST 的提代方案,GraphQL 为前端开发人员提供通过单一 GraphQL 端点查询多个数据库、微服务和 API 的功能。
 | 
 | 
主要概念和特征:
- API 的查询语言:它允许客户端请求他们需要的数据,从而可以在单个请求中获取所有所需的信息。
 - 类型系统
 - 单一端点
 - 解析器
 - 通过订阅进行实时更新
 - Introspective
 
GraphQL 的优点:
- 键入的架构
 - 非常适合图形数据
 - 没有版本控制
 - 详细的错误信息
 - 灵活的权限
 
GraphQL 的缺点:
- 性能问题
 - 缓存复杂度
 - 大量的前期开发教育
 
GraphQL 的用例:
- 灵活的前端:对于带宽至关重要的应用程序(尤其是移动应用程序),你希望最大限度地减少从服务器获取的数据。
 - 复杂的系统和微服务
 - 实时应用程序
 - 版本无关的 API
 
WebSocket
WebSocket 通过单个长期连接提供全双工通信通道,允许客户端和服务器之间进行实时数据交换。这使其成为交互式和高性能 Web 应用程序的理想选择。
 | 
 | 
主要概念和特征:
- 持久连接
 - 升级握手:WS 作为 HTTP 请求启动,如果服务器支持,则将其升级为 WS 连接。通过 Upgrade 标头完成。
 - 帧:数据以帧的形式传输。
 - 更少的开销:在初始连接后,数据帧需要发送更少的字节,从而比重复建立 HTTP 连接更少的开销和更好的性能。
 - 低延迟:客户端和服务器之间直接通信,无需为每次交换打开新连接的开销。
 - 双向
 - 协议和扩展
 
用例:
- 在线游戏
 - 协作工具
 - 金融应用
 - 通知
 - 实时推送
 
Webhook
Webhook 是由特定 Web 应用程序事件触发的用户定义的 HTTP 回调,允许实时数据更新和不同系统之间的集成。
 | 
 | 
主要概念和特征:
- 事件驱动
 - 回调机制
 - Payoad
 - 实时
 - 可定制
 
用例:
- 持续集成和部署
 - 内部管理系统
 - 支付网关
 - 社交媒体集成
 - IoT