什么是SOAP API?
SOAP 是一组W3C标准协议,其最初的设计意图是让使用不同语言且在不同平台上构建的 应用之间进行通信(RPC调用)。由于 SOAP 是一项协议,因此它会施加一些内置规则,从而增加复杂性和开销,并可导致页面加载时间延长。但是,这些标准还提供了内置合规性,使其更适合企业应用。内置合规性标准包括安全性、原子性、一致性、隔离性和持久性(ACID),这是一组旨在确保数据库事务可靠性的属性。核心规范如下:
- Web 服务安全性(WS 安全性):通过叫做”令牌”的唯一标识符,实现消息安全防护和传输方式的标准化。
- WS-ReliableMessaging:标准化了在不可靠的 IT 基础架构间传输消息的错误处理方式。
- Web 服务寻址(WS 寻址):将路由信息打包为 SOAP 标头中的元数据,而不是在网络深处维护此类信息。
- Web 服务描述语言(WSDL):描述 Web 服务的功能以及该服务的工作起点和终点。
SOAP的特点
- SOAP 指简易对象访问协议
- SOAP 是一种通信协议
- SOAP 用于应用程序之间的通信
- SOAP 是一种用于发送消息的格式
- SOAP 被设计用来通过因特网进行通信
- SOAP 独立于平台
- SOAP 独立于语言
- SOAP 基于 XML
- SOAP 很简单并可扩展
- SOAP 允许您绕过防火墙
- SOAP 将被作为 W3C 标准来发展
SOAP报文协议
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
- 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
- 可选的 Header 元素,包含头部信息
- 必需的 Body 元素,包含所有的调用和响应信息
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">1234
</m:Trans>
</soap:Header>
<soap:Body xmlns:m="http://www.task.io/management">
<m:addTask">
<task>
<name>Write a blog article</name>
<type>Writing</type>
<priority>1</priority>
</task>
</m:addTask>
</soap:Body>
</soap:Envelope>
SOAP服务发现(UDDI)
SOAP 的服务发现用的是 UDDI(Universal Description, Discovery, Integration) 统一描述发现集成,相当于一个注册中心,服务提供方将 WSDL 文件发布到注册中心,使用方可以到这个注册中心查找。
UDDI 具有两项功能:
UDDI 包括用于 SOAP 消息的 XML 模式(它定义一组文档来描述企业和服务信息)、用于查询信息和将信息发布到目录中的一组公共 API 以及用于在同级 UDDI 节点之间复制目录条目的 API。
— 什么是UDDI注册表?
UDDI依赖于企业的分布式注册表及其服务描述,以通用XML格式实现,以管理和实现Web服务的发现。Web服务提供商在UDDI注册表上宣传他们的服务,该注册表管理有关提供商、服务实现和服务元数据的所有信息。在注册表上组织和编目Web服务允许在企业内部或与外部合作伙伴共享和重用。今天,这些注册表基于UDDI 3.0规范。
UDDI注册表为提供商、服务和绑定的三个主节点的中央存储库。有两种类型的注册机构可供选择:私人和公共。私人注册表允许企业在安全的私人环境中发布和测试其内部网络应用程序。公共注册表由包含企业及其网络服务信息的同行目录组成。私人和公共注册机构都符合相同的规范。
SOAP 和 REST 有何相似之处?
要构建应用程序,可以使用许多不同的编程语言、架构和平台。在这些不同的技术之间共享数据是一项挑战,因为这些技术具有不同的数据格式。SOAP 和 REST 的出现都是为了解决这个问题。
您可以使用 SOAP 和 REST 在不同的应用程序之间构建 API 或通信点。Web 服务和 API 这两个术语可以互换使用。但是,API 是更广泛的类别。Web 服务是一种特殊类型的 API。
以下是 SOAP 和 REST 之间的其他相似之处:
- 它们都描述了有关应用程序如何发出、处理和响应来自其他应用程序的数据请求的规则和标准
- 它们都使用标准化互联网协议 HTTP 来交换信息
- 它们都支持 SSL/TLS 进行安全、加密的通信
您可以使用 SOAP 或 REST 来构建安全、可扩展且容错的分布式系统。
SOAP 和 REST 的区别是什么?
许多传统系统可能仍会遵循 SOAP 准则,而在基于 Web 的场景中,REST 常常被视为一种后来居上的替代方法。REST 是一组可灵活实施的准则,而 SOAP 则是具有特定要求(例如 XML 消息传递)的协议。
REST API 属于轻量级 API,因此非常适合较新的环境,例如物联网(IoT)、移动应用开发和无服务器计算,大部分公共 API(例如 幂简API Hub上的所有API)都遵循 REST 准则。SOAP Web 服务可提供符合许多企业需求的内置安全性和事务合规性,但同时也会让它们变得结构繁重,因此更适用于企业内部复杂系统集成。
从技术栈角度进行比较:
SOAP | REST | |
代表 | 简单对象访问协议 | 表述状态转移 |
它是什么? | SOAP 是应用程序之间通信的协议 | REST 是一种用于设计通信接口的架构风格。 |
设计 | SOAP API 会公开操作。 | REST API 会公开数据。 |
传输协议 | SOAP 是独立的,可以与任何传输协议一起使用。 | REST 只能通过 HTTPS 使用。 |
数据格式 | SOAP 仅支持 XML 数据交换。 | REST 支持 XML、JSON、纯文本、HTML。 |
性能 | SOAP 消息较大,这会使通信变慢。 | 由于较小的消息和缓存支持,REST 具有更快的性能。 |
可扩展性 | SOAP 很难扩展。服务器通过存储先前与客户端交换的所有消息来维持状态。 | REST 易于扩展。它是无状态的,因此每条消息都独立于之前的消息进行处理。 |
安全性 | SOAP 支持加密,但需要额外开销。 | REST 支持加密而不影响性能。 |
使用案例 | SOAP 在遗留应用程序和私有 API 中非常有用。 | REST 在现代应用程序和公有 API 中非常有用。 |
参考资料
如何理解SOA,SOAP,RPC, REST 协议及其之间的关系
SOAP 与 REST 之间有何区别?
了解SOAP、WSDL和UDDI基本概念
WSDL规范解读
WSDL使用解读
简单入门案例
UUDI教程