SOAP 或 REST - 当有单个客户和多个服务提供商 + 合同时

SOAP or REST - when there is single client & multiple service providers + contract

我们正在使用基于 SOAP 的 Web 服务让最终用户安排服务预约。我们的门户网站是 WebService 客户端,我们有许多供应商(分布在全球不同时区)正在构建 WebService 服务器操作。 我们正在考虑将其构建为合同优先的基于 SOAP 的 Web 服务,以便我们可以严格控制(基于接口,例如日期时间格式应该是标准 xsd:dateTime 等)作为 XML 可能的成功和错误场景的消息(通过不同的错误代码)。我们希望为所有供应商保留单一客户端代码。我们想确定

1) 我们应该考虑使用 RESTful 网络服务吗?

2) 供应商是否也可以使用 RESTful 服务(如果他们想要)(通过遵守我们的 WSDL 合同)并且我们最终使用 SOAP

免责声明:请不要认为这个答案是认真的。

嗯,我觉得问题太抽象了。你为什么要问它?因为你自己看到目前一切都是 RESTful?那你是对的。你可以做任何协议。但是如果你用 JSON 而不是 XML 来做 REST,每个人都会感谢你。如果您将使用 40 年的技术来​​创建现代服务,那么可能不会。您的承包商也一样。

SOAP 在您的情况下似乎具有的唯一优势是它已经实现了。

SOAP 是一个复杂的标准,具有不友好的实现和冗长的实现 - 即难以使用和维护。另请注意,您甚至没有使用它 "by the book" 因为您的安全性是外部的并且没有使用 ws-security

基于 REST 的界面将使您和您的用户的生活更轻松。我建议你看看像 swagger for building APIs.If you're running on premise you can take a look at API gateways like tyk If you're running in the cloud you also take a look at AWS API Gateway

这样的标准和工具

先介绍一下,

REST (Representation State Transfer) 是一种开发webservice的架构风格。其中数据和功能被视为资源,可以通过 URI(统一资源指示符)访问。它遵循客户端服务器架构并使用无状态协议(通常是 HTTP)。通常在 REST webserivces 中,资源由 GET、PUT、POST、DELETE 操作操作。一般我们使用JSON在客户端和服务器之间交换数据。重量轻。

另一方面,SOAP(简单对象访问协议)是一种基于 XML 的消息协议。这通常用于企业级别,以将自己的接口和操作定义为服务。它还遵循 REST 架构。 所以基本上,它是一个 RESTful 网络服务。

现在回答你的问题,

您似乎打算在企业级公开您的网络服务客户端。许多供应商将使用它来实现自己的 Web 服务服务器。

所以,它是完美的,你去 SOAP web 服务。

  1. 您将定义 Web 服务的框架,如消息格式、操作、绑定等,称为 WSDL。它是广泛使用的标准,任何第三方都非常容易理解。一种叫做 WADL 的东西也用于 REST 服务,但它对用户来说不是很友好。

  2. 您的供应商将使用相同的契约 (WSDL) 在他们的服务器上使用一些 API,例如 JAX-WS 以自上而下的方法实现 Web 服务。

这样您就可以在单个合同 (WSDL) 中更严格地控​​制您的操作、格式、安全性等。

现在,如果供应商想要使用 REST 网络服务而不是 SOAP。您可以在客户端之上构建一个 JAVA 代理。这会将您的肥皂消息转换为 REST 到 send/receive request/response 到 REST 网络服务。但是你不能用这种方法来支配你的合同。虽然,您可以推荐供应商构建他们自己的代理来处理您的 SOAP web 服务请求。这样你的合同就会完好无损。

如果您要为小型应用程序公开您的 Web 服务客户端,那么使用 REST 是可以的,但如果您是一家企业并且将来要扩展,您应该使用 SOAP 以获得强大的功能和易于维护的功能。