# 比较 SOAP 与 RESTful Web 服务

> 原文： [https://howtodoinjava.com/resteasy/comparing-soap-vs-restful-web-services/](https://howtodoinjava.com/resteasy/comparing-soap-vs-restful-web-services/)

尽管 **SOAP** 和 **RESTful Web 服务** – 都具有相同的目的，即基于 **SOA（面向服务的架构）**构建应用，但是它们在如何帮助实现最终输出的方式上，有着很大程度上不同。 让我们记下基于 SOAP 和 REST 的 API 之间最明显的**区别**：

| SOAP | REST |
| --- | --- |
| SOAP 是基于 XML 的消息传递协议 | REST 不是协议而是建筑风格 |
| SOAP 具有用于状态实现的规范 | REST 仅遵循无状态模型 |
| 最少的工具/中间件是必需的。 仅需要 HTTP（主要是基于 HTTP）的支持 | URL 通常引用正在访问/删除/更新的资源 |
| 定义良好的机制来描述接口，例如 WSDL + XSD，WS-Policy | 正式描述标准尚未广泛使用。 每个人都自己解释 |
| 有效负载必须符合 SOAP 模式 | 有效负载无限制 |
| 内置错误处理 | 尽管可以使用 HTTP 错误代码，但没有错误处理 |
| SMTP 和 HTTP 都是有效的应用层协议，用作 SOAP 传输 | 绑定到 HTTP 传输模型 |
| SOAP Web 服务完全忽略 Web 缓存机制 | RESTful Web 服务充分利用了 Web 缓存机制，因为它们基本上基于 URL。 |
| 很难学 | 易于学习，因为每个人都了解 HTTP |
| 通过 WS-SECURITY 对 SOAP 安全性进行了很好的标准化 | HTTP 协议层提供了安全性，例如基本认证和通过 TLS 的通信加密 |
| 当您向外界发布复杂或可能会更改的 API 时，SOAP 将更加有用 | 除此之外，REST 通常是更好的选择 |

如果您知道这些差异，请随时添加。 它也会帮助其他人。

**祝您学习愉快！**