gpt4 book ai didi

java - REST 如何使用 SOAP 作为协议(protocol)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:36 24 4
gpt4 key购买 nike

在阅读了大量有关 Web 服务的文章后,我了解到 REST 可以使用 SOAP 作为协议(protocol)。但我不明白,在 REST 架构风格中,SOAP 如何以及在哪里适合?

最佳答案

REST 是一种架构风格,如果应用得当,它允许将客户端与服务器解耦,类似于 Web 浏览器,它们不耦合到任何特定的 Web 服务器,而是耦合到它们交换的媒体类型。另一方面,SOAP 是一种协议(protocol),它在 a W3C recommendation 中详细描述了预期的语法及其语义。这通常被称为将客户端与实现耦合,因为合约通常预先生成为实际客户端通常编译并与之交互的 stub 类。如果服务接口(interface)由于某些原因而改变,那么旧的实现肯定会中断。

虽然 REST 本身不是协议(protocol)本身(它没有定义任何要交换的消息的语法或它们的顺序),但它确实需要根据协议(protocol)标准概述的规则使用其他协议(protocol)。大多数情况下,REST API 将自己限制为 HTTP。根据 Roy Fielding然而,遵循 RESTful 准则的应用程序不应依赖于单个通信协议(protocol),而应支持多个通信协议(protocol)。这可以是 HTTP、SMTP、(S)FTP 和其他协议(protocol),例如 SOAP。

REST 强加的主要约束之一是,API 必须是超文本驱动的,并支持客户与服务交互的风险。这通常与为客户端提供进一步的 URI 进行交互并因此允许客户端采取进一步的行动来遵循某个目标。 URI 的形式不是重要的部分(它是否包含动词与 RESTful 客户端无关),因为客户端不应该分析 URI 本身并因此推断出某些语义,而是使用伴随的关系名称。如果实际 URI 因任何原因发生变化,RESTful 客户端仍然能够通过利用关系名称与 API 本身进行交互,而不必解释 URI 本身。

除此之外,服务器和客户端可以同意的媒体类型概述了客户端可以采取哪些进一步操作的知识。媒体类型包含一组处理指令,这些指令告诉接收者如何解释接收到的数据。

因此,REST API 响应可以包含指向客户端可以调用的 SOAP 端点的链接。内容协商可以告诉客户端媒体类型 application/soap+xml 是必需的,它为客户端提供 SOAP 1.2 服务位于 URI 位置的线索。因为 SOAP 服务通常是通过普通的 HTTP POST 调用的。服务方法本身的调用不是实际问题,而是客户端如何知道要发送什么以及如何实际格式化它。

尽管 SOAP 客户端通常是针对实现通过 WSDL 公开的特定契约的 stub 类进行编译的,但可以通过解释 WSDL 契约并将必要的信息混合在一起来动态调用服务本身,从而将格式良好的 SOAP 消息发送到各自的端点。但我在这里看到的问题是,虽然可以在 URI 中轻松定义 SOAP 服务端点以及调用方法,但通过附加 ?wsdl 可能不一定可以获得契约(Contract)描述 (WSDL)。到该 URI 的末尾,因此需要以其他方式指定 WSDL 契约(Contract)。

都没有 HTML也不在 JSON HAL在链接中定义适当的属性以指示客户端使用某些 WSDL 契约(Contract)来生成正确的消息内容。不确定是否profile s实际上可以填补这个位置。我也不知道目前有任何其他媒体类型或协议(protocol)。因此,这将需要某种隐式(或如 Fielding 将其称为“带外”)信息集成到客户端本身中,这会增加失败的可能性,以防有人以不同的方式发布 SOAP 服务或他们的契约(Contract),因为客户端将无法进一步查找该 WSDL。

总之,虽然 REST 通常应该能够与 SOAP 合作,但为了支持客户端动态组合向服务 IMO 发出有效请求所需的信息,还需要完成某些工作。当这种支持可用时,我看不到通过 RESTful 客户端发送 SOAP 消息的主要问题。尽管如此,我还没有看到任何从(真实的)RESTful API 调用 SOAP 的真实尝试(尽管它们实际上还很少)。通常两者是分开的。虽然已经有人尝试描述类似于 SOAP 的 REST 服务(提示:WADL),但这种方法完全不是 RESTful。

关于java - REST 如何使用 SOAP 作为协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47073421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com