Web services Web服务还是自定义协议?

Web services Web服务还是自定义协议?,web-services,web-applications,Web Services,Web Applications,我没有使用web服务的经验。历史上,我使用专有通信协议构建客户机-服务器系统(即使它们碰巧是XML)。我只是花了几个小时查看Axis2,它让我不寒而栗。WS的学习曲线让我感到害怕,看到XML围绕着这么少的功能让我怀疑这是否值得 您如何决定是否需要使用Web服务或自定义通信协议?每种方法的优点/缺点是什么?它们最适合哪些用例 请发布一条明确的指导原则,而不是意见:)我最近打破了我的定制协议习惯。我现在在服务器端使用Apache和libCurl加libxML2来加载和解析在C++中编写的客户机上的X

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

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


请发布一条明确的指导原则,而不是意见:)我最近打破了我的定制协议习惯。我现在在服务器端使用Apache和libCurl加libxML2来加载和解析在C++中编写的客户机上的XML。
服务器端可以是PHP,也可以是用更严肃的语言编写的CGI。取决于您想做什么。

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

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

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

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

W3C定义的“Web服务”意味着使用HTTP上的SOAP。肥皂在大多数情况下是严重的杀伤力过大;在国际海事组织(IMO)中,只有当你向全世界提供一项公共服务时,它才是真正合适的,例如,与你的网站交互的API


其他任何东西(特别是内部、私有通信)很少需要比XML-RPC更复杂的东西。只有当性能是一个问题时,你才应该考虑更浓缩的协议;XML-RPC非常简单且得到广泛支持,因此开发和调试的简易性大大弥补了使用膨胀的XML所造成的性能损失。

请记住,有许多框架使得编程web服务变得非常简单。在VB/C#world.Net中,这是一种乐趣。我不确定其他语言的具体框架,但我确信大多数语言至少有一个框架


web服务实现和重用的标准化和简单性使它们非常有吸引力。正如前面所指出的——是的,他们的沟通非常冗长。如果您对此感到担忧,为什么不计算实际传输的数据量呢。机会是,以目前的网络和互联网速度,即使有XML开销,它也将是微不足道的。

构建RESTfulWebAPI;然后,您将获得许多自动缓存等好处,而这些好处是使用其他方法(SOAP、XML-RPC等)无法获得的

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


另一个好处是,如果您构建了一个RESTful API供代码使用,您也可以潜在地让您的用户利用它——他们经常会使用您做梦也想不到的产品。

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

可维护性和可扩展性是主要的好处。使用广泛使用的技术—您的解决方案将使其他人更容易理解,而且您还可以使用随时可用的库作为和。

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

完全是。SOAP很重,而且在很大程度上是解决整个Java技术堆栈中静态绑定需求的一种方法

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


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

那么您觉得Axis2怎么样?声称支持Web服务的REST样式调用。从未使用过它,因此没有意见,抱歉。是的,但是Web服务和使用HTTP和XML的文档化自定义协议之间有什么区别?