【问题标题】:Web Services or Custom Protocol?Web 服务还是自定义协议?
【发布时间】:2010-09-12 14:05:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: web-services web-applications


    【解决方案1】:

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

    详情请见this post

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

    【讨论】:

    • 那你觉得Axis2怎么样? ws.apache.org/axis2 声称支持 Web 服务的 REST 样式调用。
    • 没用过,所以没意见,抱歉。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

            • 是的,但是 Web 服务与也恰好使用 HTTP 和 XML 的文档化自定义协议之间有什么区别?
            【解决方案7】:

            SOAP 和 XML ——“所有的 XML 都围绕着如此少的功能让我怀疑它是否值得麻烦。”

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

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

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-07-10
                • 2021-03-09
                • 1970-01-01
                • 2011-02-12
                • 2020-04-15
                • 2012-05-05
                • 2014-03-07
                相关资源
                最近更新 更多