Web服务的 REST 和 SOAP 风格

276 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

当HTTP被作为服务通信的底层协议时,可称为Web服务。这可能有点小错误,因为Web服务不仅在Web上使用,且在几个不同的环境中使用。如:

  1. 运行在用户设备上的客户端应用程序(如移动设备上的本地应用或使用Ajax的JS web应用)通过HTTP请求服务。这些请求通常通过公网进行
  2. 一种服务向同一组织拥有的另一项服务请求,这些服务通常位于同一IDC,作为面向服务/微型架构的一部分。 支持这种用例的软件有时被称为 中间件(middleware)
  3. 一种服务通过互联网向不同组织所拥有的服务提出请求。这用于不同组织后端系统之间的数据交换。此类别包括由在线服务(如信用卡处理系统)提供的公共API或用于共享访问用户数据的OAuth

常用Web服务方法:REST和SOAP。设计理念几乎完全相反,所以争辩激烈。

REST不是一种协议,而是一个基于HTTP原则的设计理念。强调简单数据格式,使用URL标识资源,并使用HTTP功能进行缓存控制、身份验证和内容类型协商。与SOAP相比,REST越来越受欢迎,至少在跨组织服务集成的背景下,并经常与微服务相关。根据REST原则设计的API称为RESTful。

SOAP

SOAP,用于发出网络API请求的基于XML协议。虽常用于HTTP,但其目的是独立于HTTP,并避免使用大多HTTP功能。相反,它有庞大而复杂的多种相关标准(Web服务框架,称为WS-*)和增加的各种功能。

SOAP Web服务的API使用称为Web服务描述语言(WSDL)的基于XML的语言来描述。 WSDL支持代码生成,客户端可以使用本地类和方法调用(编码为XML消息并由框架再解码)来访问远程服务。这在静态类型语言很有用,但动态类型语言中很少。WSDL不是为人类可读而设计,且由于SOAP消息通常因为过于复杂而无法手动构建,所以SOAP用户很大程度依赖工具、代码生成和IDE。对无SOAP供应商支持的编程语言用户,与SOAP服务集成很困难。

尽管SOAP及其各种扩展表面上是标准化的,但是不同厂商的实现之间的协作往往造成问题。由于所有这些原因,尽管许多大型企业仍使用SOAP,但小公司基本不再使用。

REST风格API倾向更简单的方法,涉及较少代码生成和自动化工具。定义格式(如OpenAPI,也称为Swagger )可用于描述RESTful API并生成文档。