Web服务还是自定义协议?
我没有使用Web服务的经验。从历史上看,我已经使用专有的通信协议(即使它们碰巧是XML)构建了客户端-服务器系统。我只花了几个小时查看Axis2,它使我的脊椎发抖。 WS的学习曲线使我感到恐惧,看到所有XML都围绕这么少的功能使我怀疑是否值得这样做。
我们如何确定是否需要使用Web服务或者自定义通信协议?每种方法的优点/缺点是什么?它们最适合什么用例?
请发布明确的指南,而不是发表意见:)
解决方案
我最近打破了自定义协议的习惯。我现在在服务器端使用Apache,并在libCurl和libxml2上加载和解析用C ++编写的客户端上的XML。
服务器端可以是用更严肃的语言编写的PHP或者CGI。取决于我们要做什么。
Web服务的优点是有点标准化,因此我们从未听说过的程序可能会使用我们编写的Web服务。使用HTTP可以帮助他们通过代理和其他网络障碍进行通信,而无需我们进行任何额外的工作。 XML尽管冗长且丑陋,但在调试时比二进制数据更易于阅读。
当我们通过网络传输内容时,将序列化/反序列化为xml不太可能成为性能的限制因素。这可能有点麻烦,尽管为我们做的图书馆会有所帮助。
以我个人(老兄)的观点,网络服务仅应作为一种将内部信息提供给第三方(即其他公司,组织外部的人员等)的方式。当然,这也是XML最初的目的。 :-)
如果我们有权访问包含信息的数据库的直接连接,那么应用程序就是这种方式。它更快,更简单,在应用程序开发中意味着"更好"和"更少的错误"。
W3C定义的" Web服务"是指通过HTTP使用SOAP。在大多数情况下,SOAP都是严重的滥杀滥伤;仅当我们向全世界提供公共服务(例如与网站进行交互的API)时,这才是真正合适的(IMO)。
其他任何东西(尤其是内部,专用通信)很少需要比XML-RPC更复杂的东西。仅当性能成为问题时,才应考虑使用更精简的协议。 XML-RPC非常简单且得到广泛支持,以至于开发和调试的简便性不仅仅弥补了使用过时的XML带来的性能损失。
请记住,有许多框架使Web服务编程变得非常琐碎。在VB / Cworld中,.Net让它变得很快乐。我不确定其他语言的特定框架,但我敢肯定大多数都至少有一个。
Web服务的实现和重用的标准化和简单性使其非常具有吸引力。如先前指出的那样,它们使通讯非常冗长。如果我们对此担心,为什么不计算实际要传输的数据量。在当前的网络和Internet速度下,即使有XML开销,也很容易实现。
构建RESTful Web API;那么我们会获得很多自动缓存和其他好处,而如果使用其他方法(SOAP,XML-RPC等)则无法获得这些好处
有关更多详细信息,请参见此帖子
另一个好处是,如果我们为要使用的代码构建RESTful API,则可以潜在地让用户利用它,因为他们经常会用到我们梦uses以求的产品。
我将始终使用自定义数据格式作为最后的手段,而不是第一个手段。我们可以使用哪种广泛使用的方法来使用它,但是Web服务模型不太可能出错。
可维护性和可扩展性是主要优点。使用广泛使用的技术,解决方案将使其他人更容易理解,并且我们可以将现成的库用作使用者和提供者。
SOAP和XML-"所有XML围绕这么少的功能,让我想知道是否值得这样做。"
完全。 SOAP是重量级的,并且在很大程度上-一种针对整个Java技术堆栈中静态绑定需求的解决方法。
另一方面,REST的重量要轻得多。此外,带JSON的REST或者带YAML的REST非常轻巧,并且易于实现。它建立在现成的HTTP协议之上。
REST要求我们定义资源(通过URI命名)和基于规范的CRUD规则(GET,POST,PUT和DELETE)的事务。非常简单和规范。