为什么将 SOAP 用于 Web 服务?

2024-05-13

我读过教程“web-service-php-mysql-xml-json http://davidwalsh.name/web-service-php-mysql-xml-json".

看来一切都好。但是为什么我们应该使用soap 来提供网络服务呢?


构建 Web 服务时,您可以采用两种方法:

  • SOAP
  • REST

大多数人都会选择阻力较小的道路,即REST。这意味着简单、易于开发、按照应有的方式使用 HTTP、充分利用缓存代理、更易于人类阅读的结果等。

SOAP另一端比 REST 更重量级,并且也有大量的支持规格 http://en.wikipedia.org/wiki/List_of_web_service_specifications。但由于它更加复杂(SOAP 曾经是 Simple Object Access Protocol 的缩写 – 事实证明……不是),所以 SOAP 并没有受到很多人的喜欢。

两种方法都有效,并且都有优点和缺点。

例如,SOAP 可以使用任何传输协议,而不仅仅是 HTTP(S),在涉及安全性时,SOAP 提供更多选项,SOAP 提供可靠的消息传递等。另一方面,REST 允许许多不同类型的数据格式,REST 允许更好的数据格式。由于 JSON 格式而支持浏览器,REST 具有更好的性能等等。

我不打算讨论更多细节,因为您可以在网络上找到很多 SOAP 与 REST 的比较。我想强调的是,在某些情况下,一种方法比另一种方法效果更好,并且根据您的具体情况,您可以决定并选择实施哪一种.

EDIT:回答你的问题:

为什么使用 SOAP 或 REST?没有它们我们也能拥有网络服务吗?

那么,W3C 将 Web 服务定义为“旨在支持网络上可互操作的机器对机器交互的软件系统 http://en.wikipedia.org/wiki/Web_service".

好吧...这对于定义来说很好。但这不是 SOAP/REST 的定义,这个需求可以成功抛出通讯协议 http://en.wikipedia.org/wiki/Communications_protocol处理。

因此,基本上,只要支持“可互操作的机器对机器交互”,您就可以使用任何您想要的通信协议(甚至创建您自己的协议)来拥有 Web 服务。这也意味着 SOAP 或 REST 之外的其他东西(好吧……REST 不是一个协议,我只是在这里用它作为参考来证明我的观点……所以请耐心等待)。

但是您创建了一个 Web 服务,因为您希望一些客户使用您的服务。你的客户在狂野的西部(即网络:D),那里的人们讲 SOAP/REST。然后你过来说:“我们真的不喜欢我们店里的 SOAP 和 REST,我们喜欢 RPC、CORBA 和我们自己独特创建的“Bone Crusher 10000”协议之类的东西。如果你想和我们做生意,你就去学习“碎骨机10000”“。你的客户会说(扬起眉毛)”是啊啊啊啊啊啊啊啊啊……".

(我在这里假设您的协议不会是完全超越 SOAP/REST 的根本性协议:D)

因此,如果您不使用 SOAP/REST,您就会限制您的目标受众。例如,它就像英语。我不是以英语为母语的人,是吗?好吧,这并不重要,因为我们可以用英语交流。想尝试这个冰岛的 http://en.wikipedia.org/wiki/Icelandic_language? 。我学习冰岛语时你会等我吗,因为这也不是我的母语?

正如我已经说过的,根据您的具体情况,您可以决定并选择要实施的内容,但是如果你远离已知的技术堆栈,你就会抛弃随之而来的东西:大量的经验、资源、工具和沟通选项.

作为最后一个示例,现在对 SOAP 协议有很多支持,您可以从 WSDL 文件开始非常轻松地生成客户端。和presto http://www.audioenglish.net/dictionary/presto.htm...您的客户可以与您的网络服务进行通信。 《Bone Crusher 10000》会这么简单吗?如果您编写工具、提供资源、支持等……是的!但这会花费你时间和金钱来创造一些东西已经被发明并且今天被广泛使用.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将 SOAP 用于 Web 服务? 的相关文章

随机推荐

  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • 为什么减法返回 - 符号

    我对简单的减法有疑问 但我不明白出了什么问题 我的代码 start date s N cut b1 13 Treatment end date s N cut b1 13 delta expr end start echo delta de
  • 如何将 x86 GCC 风格的 C 内联汇编转换为 Rust 内联汇编?

    我在 C 中有以下内联汇编 unsigned long long result asm volatile byte 15 byte 49 shlq 32 rdx orq rdx rax a result rdx return result
  • 两个对象相互依赖。那不好吗?

    当我为我的项目构建自己的系统时 我学到了很多关于设计模式的知识 我想问你一个我找不到答案的设计问题 目前我正在使用套接字构建一个带有多个客户端的小型聊天服务器 现在我有三门课 人级其中包含昵称 年龄和房间对象等信息 房间级它保存诸如房间名称
  • 如何计算总和的平方和?

    我有一笔款项需要加快处理速度 在一种情况下是 S x y k l Fu ku Fv lv Fx kx Fy ly 另一种情况是 S x y S k l Fu ku Fv lv Fx kx Fy ly 2 注意 S indices 是这些索引
  • 用于在 Windows 中自动执行桌面活动的 Python 代码

    我想使用 Python 在 Windows 环境中自动化桌面活动 怎样才能做到呢 一些例子也会有帮助 我所说的桌面活动是指控制鼠标和键盘 访问活动窗口属性 双击桌面上的图标 最小化和最大化窗口 通过键盘向输入弹出窗口输入数据等操作 看一下S
  • 使用 PHP DOMDocument 更改标签属性值

    我想用 PHP DOMDocument 更改标签属性的值 例如 假设我们有这行 HTML a href http foo bar Click here a 我将上面的代码加载到 PHP 中 如下所示 dom new domDocument
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • 暂时禁用/绕过中间件

    在我的应用程序中 我实现了 OAuth2 服务器 oauth2 服务器 laravel https github com lucadegasperi oauth2 server laravel 与自定义身份验证包 Cartalyst 的哨兵
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 如何在 moment.js 中将日期格式化为 ISO 8601?

    这个文档提到moment ISO 8601作为格式化选项 从 2 7 0 http momentjs com docs parsing special formats http momentjs com docs parsing speci
  • 如何启用 php curl 以在 php cli 中使用

    我已经在没有服务器的情况下在我的计算机上安装了 php 并使用 cli 运行它 但未启用 php curl 我不知道如何执行此操作 如果有人遇到此线程并使用 wamp 服务器 这里有一个针对上述问题的快速解决方案http forum wam
  • 查询从 Teradata 时间戳返回特定日期(6)

    我如何从 teradata timestamp 6 字段中搜索特定日期 例如 2013 10 22 sel from table A where date 2013 10 22 我尝试了上面的查询 该查询抛出错误 请帮忙 你可以这样尝试 s
  • 检测用户何时清除通知中心的通知

    我的应用程序需要知道用户是否使用清除按钮从通知中心删除 清除应用程序通知 是否可以检测用户何时从通知中心删除通知或抓取通知中心上的一组通知 你 即App 无法与NotificationCenter交互 NotificationCenter与
  • PHP 数据库显示在具有不同锚标记的相同字段中

    我四处寻找 看看这是否可行 但却空手而归 首先 这是我的代码 div style display none div ul li li li li li li ul
  • 我需要在 Java 9 中使用哪个模块才能使用 JPA?

    我正在使用一个需要 JPA 的项目测试 Java 9 javax persistence 类 当我添加module info java并声明我的模块 下的所有类javax persistece包变得不可用 我搜索了很多 但找不到在 Java
  • Meteor 用户属性

    我希望能够在 Meteor 身份验证系统中将用户标记为 管理员 并允许该用户执行特殊操作 以及显示一些如果他们不是管理员则不会显示的 gui 元素 我已经尝试在用户对象上设置一个 admin 属性 这在服务器端可以正常工作 对于管理操作的
  • 在 Android 10/Q 上运行的 Android ACTIVITY_RECOGNITION 权限 SDK 28 (SDK 29)

    我的 Android 应用程序以 SDK 28 为目标 并连接到 Google Fit 以上传数据并读取其他一些数据 该应用程序使用 HistoryAPI 读取 com google step count delta 数据 本文档声称 如果
  • 使用 PHP SDK 获取页面的最新 Facebook 帖子

    以下代码位于名为 facebook posts php 的文件内 我从索引文件中调用该文件 如下所示 然而 这段代码放到哪里 却没有任何反应 因此 成功和捕获错误都不会返回错误 正如我所见 我尝试过绝对网址 但这也不起作用 我隐藏了 api
  • 为什么将 SOAP 用于 Web 服务?

    我读过教程 web service php mysql xml json http davidwalsh name web service php mysql xml json 看来一切都好 但是为什么我们应该使用soap 来提供网络服务呢