- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在阅读了大量有关 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/
我正在使用 SOA 客户端 Firefox 插件向某些 ONVIF 摄像机发送 SOAP 请求。您将在下面看到“GetServices”请求。它对于一台相机工作正常,但对于另一台(AXIS 相机)我收
我正在使用 SOA 客户端 Firefox 插件向某些 ONVIF 摄像机发送 SOAP 请求。您将在下面看到“GetServices”请求。它对于一台相机工作正常,但对于另一台(AXIS 相机)我收
有谁知道 Fiddler 是否可以显示 ASMX Web 服务的原始 SOAP 消息?我正在使用 Fiddler2 和 Storm 测试一个简单的 Web 服务,结果各不相同(Fiddler 显示纯
使用 SOAP 协议(protocol)时,是否可以使用 SOAP 取消挂起的远程函数调用? 我看到三种不同的情况: A) 向需要很长时间才能完成的服务发出请求。例如,当复制包含大量文件的目录时,可以
人们还在写吗SOAP services还是已经通过了它的技术architectural shelf life ?人们是否回归二进制格式? 最佳答案 SOAP 的替代方案不是二进制格式。 我认为您看到了
SOAP 协议(protocol)工作的默认端口号是多少? 最佳答案 没有“SOAP 协议(protocol)”之类的东西。 SOAP 是一种 XML 模式。 但是,它通常通过 HTTP(端口 80)
之间有什么区别 和 以及如何在它们之间切换? 如何将响应从 具有定义的命名空间 "http://schemas.xmlsoap.org/soap/envelope/" ,它的特殊含义是底层 XML
我正在从 Mule 进行 SOAP 调用。我正在使用 default-exception-strategy 来捕获异常。发生异常时,如何发送我自己的故障代码和故障字符串而不是通用的 soap 故障消息
我正在编写一个 powershell 脚本,它将每 10 分钟 ping 一次soap web 服务,以使其保持活跃状态,从而提高性能。我们已经在 IIS 中尝试了多种技术,应用程序池空闲超时和只
如有任何帮助,我们将不胜感激;我已经研究了几天了。 下面是我目前得到的代码;不幸的是,当我运行它时出现 HTTP 415 错误; 无法处理消息,因为内容类型为“text/xml; charset=UT
我们需要使用其他团队开发的网络服务。使用 JAX-WS用于生成网络服务。我们正在使用 wsimport 生成客户端 stub 。 问题是我需要将以下信息作为 header 与 SOAP 正文一起传递:
我的意思是,真正的互操作:从 Java 到 .NET,从 PHP 到 Java,等等。 我之所以这样问,是因为我们的权力希望我们使用 SOAP Web 服务实现面向公众的 API,并且我试图强调支持
我写了一个拦截器进行测试。但是我在Interceptor中获得的Soap消息正文始终为null。 我的Cxf是Apache-CXF-2.4.0 bean.xml是这样的:
我正在尝试查询货币的 netsuite api。以下soap请求在SOAP UI客户端中对我有用。但是我很难尝试使用 ruby 的 savon gem 0.9.7 版进行相同的工作。
我创建了一个示例 Mule 流,首先根据 http://www.mulesoft.org/documentation/display/current/Consuming+Web+Services+wi
我正在尝试使用此 SOAP 服务:http://testws.truckstop.com:8080/v13/Posting/LoadPosting.svc?singleWsdl使用 node-soap
我有几个 SoapUI 测试步骤,其中响应返回空(即“-> 空/空响应”),这正是我所期望的。 如何断言对测试步骤请求的响应为空? 到目前为止,我已经尝试了以下但没有运气: 审查可用的断言,无需定制
我正在尝试构建一个手动 HTTP 请求,以便从我认为是相当简单的 SOAP Web 服务调用中返回响应。但是,我无法正确构建请求,并且没有得到我期望的响应。 适用wsdl声明: wsdl 目标命名空间
我正在尝试使用 Insomnia 调用 SOAP 电话 - 特别是试图让帖子成功。我将 URL 定义为端点,并将正文类型作为带有 SOAP 内容(信封、标题、正文)的 XML。我在标题中定义了用户 I
我正在学习 SOAP 实现,并且对于 SOAP 1.2 信封的适当 namespace URI 感到有些困惑。 w3c specification for SOAP指的是“http://www.w3.
我是一名优秀的程序员,十分优秀!