API 架构风格是如何演进的?

开发 架构
RPC 是最早的通信协议之一,允许客户端像在本地一样在远程服务器上执行函数(或过程)。RPC 可采用 JSON-RPC、XML-RPC 或 Protocol Buffers(如gRPC)等格式,通常用于简单快速的场景。

随着软件架构的发展,支持系统之间通信的API风格也在不断演变。SOAP、REST、GraphQL和RPC是四种流行的API架构风格,各自提供了独特的数据交换方式,且均为满足特定需求而出现。

图片图片

01 SOAP(简单对象访问协议)

SOAP 是最早的 API 标准之一,于上世纪90年代末开发,主要用于支持企业环境中复杂且高度结构化的数据交换。SOAP 是协议而非风格,它定义了严格的消息格式、安全性(通过WS-Security)和错误处理规范。SOAP 依赖 XML 格式,并能在 HTTP、SMTP 等协议上运行。SOAP 的严格标准提供了高可靠性和安全性,适用于金融、支付系统等需要高安全性的应用场景。

然而,SOAP 的复杂性和冗长性使其在轻量级、基于 Web 的应用中不够灵活。随着时间推移,SOAP 逐渐被更简单、灵活的替代方案取代,但在遗留系统和企业环境中仍然被广泛使用。

02 REST

REST 由 Roy Fielding 于 2000 年代早期提出,是一种更灵活的架构风格。与 SOAP 不同,REST 不是协议,而是一套指导 API 设计的原则。RESTful API 使用 HTTP 方法(GET、POST、PUT、DELETE)来将 CRUD 操作(创建、读取、更新、删除)映射到资源上,这些资源通过 URL 表示。

REST 提供了极大的简洁性和灵活性,使其易于使用,非常适合 Web 应用。它支持不同的数据格式(如 JSON、XML 等),其中 JSON 因其可读性和轻量特性而被广泛采用。REST 的无状态性和对 HTTP 的遵循使其便于扩展,但有时会导致数据的过度获取或不足获取,因为客户端通常会获取到比所需更多或更少的数据。尽管存在这些限制,REST 凭借易于实现和广泛的 HTTP 支持成为 Web API 的实际标准。

03 GraphQL

GraphQL 由 Facebook 于 2012 年开发,旨在解决 REST 的一些局限性,它允许客户端在一次请求中精确地指定所需的数据。GraphQL 不像固定的资源端点,而是提供了一种灵活的查询系统,客户端可以请求具体的字段和关系。

GraphQL 通过防止数据的过度获取和不足获取提高了效率,特别适用于数据需求复杂的应用,如带宽和性能关键的移动应用和单页应用。然而,GraphQL 在服务器实现、缓存和性能优化方面引入了额外的复杂性。GraphQL 本质上是有状态的,这可能会影响某些场景的可扩展性。

04 RPC(远程过程调用)

RPC 是最早的通信协议之一,允许客户端像在本地一样在远程服务器上执行函数(或过程)。RPC 可采用 JSON-RPC、XML-RPC 或 Protocol Buffers(如gRPC)等格式,通常用于简单快速的场景。

与更偏向资源的 REST 和 GraphQL 不同,RPC 是面向动作的,将端点视为可调用函数。gRPC 是由 Google 开发的一种RPC框架,利用 HTTP/2 和 Protocol Buffers 来实现高性能、低延迟的通信,非常适合微服务架构。然而,RPC 的紧耦合方式降低了灵活性,使 API 版本管理更加复杂。

05 如何选择合适的风格

API 风格根据对简单性、性能、灵活性和开发效率的需求而不断演进。在SOAP、REST、GraphQL 和 RPC 之间的选择取决于应用的具体需求:

  • SOAP 仍适用于需要严格安全性和事务性的应用。
  • REST 是多用途的标准,适合多数Web应用,平衡了简单性和灵活性。
  • GraphQL 适合数据需求复杂且高效数据提取至关重要的应用。
  • RPC/gRPC 在高性能的内部微服务架构中非常有效。

在现代软件中,通常会根据应用不同部分的需求结合使用这些风格。每种风格都有其优势,理解它们可以帮助开发者为 API 策略选择最佳工具。

责任编辑:武晓燕 来源: ByteByteGo
相关推荐

2023-12-30 08:27:13

2024-04-24 07:00:00

Redis架构数据持久化

2024-03-06 11:22:33

架构演进技巧

2023-09-06 11:35:11

2019-03-26 09:37:11

ES系统架构

2019-01-14 09:06:40

LBS定位系统架构

2021-06-07 10:13:01

单体架构系统

2018-11-29 09:36:45

架构系统拆分结构演变

2023-12-04 07:25:20

软件架构

2020-11-18 10:54:29

垃圾回收器演进

2022-03-04 12:01:06

架构师互联网业务

2020-10-21 10:04:56

云原生应用架构

2010-11-15 17:23:09

网络架构

2021-04-02 12:37:53

RestfulAPI接口架构

2017-11-30 12:39:06

2010-11-18 11:44:27

广域网优化网络拓扑H3C

2021-01-28 05:11:26

HDFS架构Hadoop

2010-02-07 14:00:46

badaC++

2016-03-15 16:24:47

集群调度框架演进

2023-02-09 07:38:39

配置中心架构组件
点赞
收藏

51CTO技术栈公众号