3

我没有使用网络服务的经验。从历史上看,我曾使用专有通信协议(即使它们碰巧是 XML)构建客户端-服务器系统。我只花了几个小时查看 Axis2,它让我的脊椎不寒而栗。WS 的学习曲线让我害怕,看到所有的 XML 围绕着这么少的功能让我怀疑是否值得这么麻烦。

您如何决定是否需要使用 Web 服务或自定义通信协议?每种方法的优点/缺点是什么,它们最适合哪些用例?

请发布明确的指导方针,而不是意见片:)

4

8 回答 8

4

构建 RESTful Web API;那么您将获得很多使用其他方法(SOAP、XML-RPC 等)无法获得的自动缓存等好处

有关更多详细信息,请参阅此帖子

另一个好处是,如果您构建一个 RESTful API 供您的代码使用,您可以潜在地让您的用户也利用它——他们经常对您的产品有您从未梦想过的用途。

于 2008-09-24T00:27:37.133 回答
1

W3C 定义的“Web 服务”是指使用 SOAP over HTTP。在大多数情况下,SOAP 是严重的矫枉过正。仅当您向全世界提供公共服务时才真正合适(IMO),例如用于与您的网站交互的API。

其他任何东西(尤其是内部、私人通信)很少需要比 XML-RPC 更复杂的东西。只有当性能是一个问题时,您才应该考虑更精简的协议;XML-RPC 是如此简单且得到广泛支持,以至于开发和调试的便利性足以弥补使用臃肿的 XML 所带来的性能损失。

于 2008-09-24T00:25:01.680 回答
1

请记住,有许多框架使 Web 服务编程变得非常琐碎。在 VB/C# 世界中,.Net 让它成为一种乐趣。我不太确定其他语言的特定框架,但我相信大多数至少有一个。

Web 服务的实现和重用的标准化和简单性使它们非常有吸引力。如前所述——是的,它们使通信变得非常冗长。如果您对此感到担心,为什么不计算一下您实际传输的数据量。很有可能,以当前的网络和互联网速度,这将是微不足道的——即使有 XML 开销。

于 2008-09-24T00:27:33.153 回答
1

我总是将自定义数据格式作为最后的手段,而不是第一次使用。您使用哪种广泛使用的方法取决于您,但您不太可能在使用 Web 服务模型时出错。

可维护性和可扩展性是主要优点。使用广泛使用的技术,您的解决方案将更容易被其他人理解,而且您可以使用现成的库作为消费者提供者

于 2008-09-24T00:41:06.117 回答
0

我最近打破了我的自定义协议习惯。我现在在服务器端使用 Apache,在客户端使用 libCurl 和 libxml2 来加载和解析用 C++ 编写的 XML。

服务器端可以是 PHP,也可以是用更严肃的语言编写的 CGI。取决于你想做什么。

于 2008-09-24T00:23:21.480 回答
0

Web 服务的优点是有点标准,因此您从未听说过的程序可以使用您编写的 Web 服务。使用 HTTP 可以帮助他们通过代理和其他网络障碍进行通信,而无需您进行任何额外的工作。XML 虽然相当冗长和丑陋,但在调试时比二进制数据更容易阅读。

当您通过网络传输内容时,对 xml 的序列化/反序列化不太可能成为性能的限制因素。这可能会有点麻烦,尽管为您做这件事的图书馆会有很大帮助。

于 2008-09-24T00:23:27.377 回答
0

在我个人(老胡闹的家伙)看来,Web 服务只应用作向第三方(即其他公司、组织外的人等)提供您的一些内部信息的一种方式。当然,这也是XML 的初衷。:-)

如果您可以访问包含应用程序所需信息的数据库的直接连接 - 这就是要走的路。它更快更简单——这在应用程序开发中意味着“更好”和“更少错误”。

于 2008-09-24T00:24:33.163 回答
0

SOAP 和 XML —— “所有 XML 所包含的功能如此之少,让我怀疑它是否值得麻烦。”

完全。SOAP 是重量级的,并且——在很大程度上——解决了整个 Java 技术栈中对静态绑定的需求。

另一方面,REST 的重量要轻得多。此外,带有 JSON 的 REST 或带有 YAML 的 REST 非常轻量级,并且非常容易实现。它建立在现成的 HTTP 协议之上。

REST 要求您定义资源(通过 URI 命名)和基于规范 CRUD 规则(GET、POST、PUT 和 DELETE)的事务。非常简单和规范。

于 2008-09-24T01:31:09.057 回答