选择Web服务的方法

时间:2010-06-18 15:57:28

标签: language-agnostic rest soap web-services xml-rpc

我被要求建立一个新的Web服务,应该可以使用任何语言(php,.NET,Java等)轻松使用。当然滚动我自己可以完成,接受不同的内容类型(xml / x-www-form-urlencoded(普通帖子)/ json /等),但是现有的方法或机制当然是首选,减少时间花在开发服务的消费者身上。

Web服务确实接受修改/集合(它不仅仅是数据检索),但那些很可能会比得到的少得多(我们估计大约2.5%的集合,97.5得到)。这里的术语webservice表示协议应该通过HTTP,不能完全实现客户端(最终用户浏览器中的javascript等),因为它需要特定的用户身份验证。

参数计数(通常为1到4)的获取和设置都很清楚。像REST这样的方法(我只想获得),XML-RPC& SOAP(可能有点矫枉过正,但具有明确定义的方法和返回的优点)是常见的嫌疑。

您认为/经验中最广泛使用的“口语”和最容易实现的协议(从消费者的角度来看)可以满足这种需求吗?

3 个答案:

答案 0 :(得分:3)

除了Java和/或.NET之外,SOAP几乎是所有消费者的噩梦,除非事情发生变化,否则让Java客户端与.NET服务器通信(反之亦然)是一件痛苦的事。如果你选择SOAP路线,你几乎可以让自己和你的网络服务的消费者感受到工具支持,因为没有人愿意手工处理SOAP。

您可以用几乎任何语言为RESTful Web服务编写消费者,因为它只需要一个HTTP库,尽管大多数主流语言的库都可以帮助处理内容类型协商等问题。这些库对于服务器来说也是一个巨大的胜利,顺便说一句。

根据定义,真正的 RESTful API是可发现的:超文本作为应用程序状态引擎(HATEOAS)是REST的定义特征之一。公平地说,这在现实世界中通常被忽略,主要是因为它太过分了。像AtomPub或Sun的云服务器管理API之类的东西可能是真正RESTful服务的一个很好的例子。

无论采用哪种方法,您都应该自己编写清晰的文档,而不是依赖自动生成的文档。这些在需要时是有用的参考,但它们并不代替好的手写文档。

答案 1 :(得分:3)

我们对此进行了大量研究,最终选择了REST。很多精心设计的Web服务都使用REST,包括Amazon S3。我认为Gmail也会在后端使用REST。

根据我的观察,RESTful Web服务设计似乎变得越来越突出,因为其设计的优势和其他设计(如SOAP)的缺点在时间和经验上变得更加明显。

REST似乎运行良好的原因在于它自然适合Web的客户端 - 服务器性质,它将安全和幂等GET请求,幂等PUT请求和POST的分离既不安全也不安全幂等。它已经存在了很长时间,所以一个适当布局的RESTful Web服务可以被各种Web客户端使用,有些甚至可能没有预料到。例如,网络爬虫只知道使用GET请求资源,因为它保证不会影响资源,而PUT和POST请求有不同的规则。

在我们决定使用RESTful服务架构之后,我读了这本书:RESTful Web Services以便学习基础知识。如果您决定阅读它,请知道该书可能是它需要的两倍,因此您必须明智地阅读要阅读的内容和要跳过的内容 - 因为您要跳过这一点。

答案 2 :(得分:0)

SOAP服务具有可被发现的优点。在.NET(以及我假设的其他语言)中,您可以简单地创建一个新的Web服务类(ASP.NET中的.ASMX),并将任何方法添加到您需要的接口中。该框架将为您生成可通过HTTP检索的WSDL。 WSDL包含调用应用程序使用的类定义,为每个方法提供正确的参数名称和类型。等

REST或其他通常不可发现的服务的缺点是您必须手动维护该接口的文档。在没有WSDL内部信息和执行WSDL的情况下调试与客户端的通信问题可能更加困难。