API怎么选?比较SOAP,REST,GraphQL和RPC( 二 )


简单对象访问协议(SOAP):使数据作为服务可用SOAP是XML格式的高度标准化的Web通信协议 。SOAP在Microsoft于XML-RPC发行一年后发布,从中继承了很多东西 。当REST紧随其后时,它们首次并行使用,但很快REST赢得了流行度竞赛 。
SOAP如何工作XML数据格式拖累了许多形式 。配合庞大的消息结构,它使SOAP成为最冗长的API样式 。
SOAP消息包括:
· 包含请求或响应的正文
· 标头(如果消息必须确定任何具体要求或额外要求),以及
· 故障通知在整个请求处理过程中可能发生的任何错误 。

API怎么选?比较SOAP,REST,GraphQL和RPC

文章插图
> An example of the SOAP message. Source: IBM
SOAP API逻辑以Web服务描述语言(WSDL)编写 。该API描述语言定义了端点并描述了可以执行的所有过程 。这允许不同的编程语言和IDE快速建立通信 。
SOAP支持有状态和无状态消息传递 。在有状态的情况下,服务器存储接收到的信息可能非常重 。但这对于涉及多方和复杂交易的操作是合理的 。
SOAP优点与语言和平台无关 。创建基于Web的服务的内置功能允许SOAP处理通信并做出与语言和平台无关的响应 。
绑定到各种传输协议 。SOAP在传输协议方面很灵活,可以适应多种情况 。
内置错误处理 。SOAP API规范允许返回带有错误代码及其说明的Retry XML消息 。
许多安全扩展 。SOAP与WS-Security协议集成,可满足企业级事务质量 。它在事务内部提供隐私和完整性,同时允许在消息级别进行加密 。
API怎么选?比较SOAP,REST,GraphQL和RPC

文章插图
> SOAP message-level security: authentication data in the header element and encrypted body
SOAP缺点如今,由于多种原因,许多开发人员对必须集成SOAP API的想法感到不安 。
仅XML 。SOAP消息包含大量元数据,并且仅支持请求和响应的详细XML结构 。
重量级的 。由于XML文件的大小,SOAP服务需要很大的带宽 。
狭义的知识 。构建SOAP API服务器需要深入了解所有涉及的协议及其严格的规则 。
乏味的消息更新 。需要额外的努力来添加或删除消息属性,严格的SOAP模式会减慢采用速度 。
SOAP用例目前,SOAP体系结构最常用于企业内部或与其信任的合作伙伴的内部集成 。
高度安全的数据传输 。SOAP的严格结构,安全性和授权功能使其成为执行API与客户端之间的正式软件合同,同时又遵守API提供者与API使用者之间的合法合同的最合适的选择 。这就是为什么金融组织和其他公司用户选择SOAP的原因 。
REST:使数据可用作资源REST是一种不言自明的API架构样式,由一组架构约束定义,旨在供许多API使用者广泛采用 。
当今最常见的API样式最初是由Roy Fielding于2000年在其博士论文中描述的 。REST使服务器端数据可用,以简单格式(通常为JSON和XML)表示它 。
REST如何工作REST的定义不像SOAP那样严格 。RESTful体系结构应遵守六个体系结构约束:
· 统一接口:无论设备或应用程序类型如何,都可以采用统一的方式与给定服务器进行交互
· 无状态:处理请求本身所包含的请求的必要状态,并且服务器不存储与会话相关的任何内容
· 快取
· 客户端-服务器体系结构:允许双方的独立发展
· 应用程序的分层系统
· 服务器向客户端提供可执行代码的能力
实际上,某些服务仅在一定程度上是RESTful的 。它们以RPC样式为核心,将较大的服务分解为资源,并有效地使用HTTP基础结构 。但是关键部分是使用超媒体(又称HATEOAS),是超文本作为应用程序状态引擎的缩写 。基本上,这意味着REST API在每个响应中都提供元数据链接,该元数据链接到有关如何使用该API的所有相关信息 。这样便可以使客户端和服务器脱钩 。结果,API提供者和API使用者都可以独立发展,而不会阻碍他们的交流 。
API怎么选?比较SOAP,REST,GraphQL和RPC

文章插图
> Richardson Maturity Model as a goalpost to achieving truly complete and useful APIs, Source: Krist
" HATEOAS是REST的关键功能 。真正使REST成为REST的原因 。由于大多数人不使用HATEOAS,因此实际上是在使用HTTP RPC,"这是Reddit上表达的一些激进观点 。实际上,HATEOAS是REST的最成熟版本 。但是,要实现比当今通常使用和构建的API客户端更为先进和智能的API客户端要困难得多 。因此,即使是当今非常好的REST API也不一定总是做到这一点 。这就是为什么HATEOAS主要用作RESTful API设计的长期开发的愿景 。


推荐阅读