WSDL vs REST Pros and Cons

Related:

Why would one use REST instead of Web services?

When deciding whether to implement a web service using SOAP or REST (by which I mean HTTP/XML in a RESTful manner) what should I be aware of and what should I be thinking of? I presume that this isn't a one size fits all thing so how do I choose which to use.

127493 次浏览

客户端的工具集将是一个。以及对 SOAP 服务的熟悉程度。现在越来越多的服务采用 RESTful 路线,可以通过简单的 cURL 示例来测试这些服务。 尽管如此,实现这两种方法并允许从客户机获得最广泛的利用并不那么困难。

如果你需要选择一个,我建议休息,它更容易。

为了保护 REST,它严格遵循 HTTP 和可寻址性原则,例如读操作使用 GET,更新操作使用 POST 等。我发现这是一个更干净的方法。Oreilly 的书 RESTful Web Services 比我更好地解释了这一点,如果你读了它,我认为你会更喜欢 REST 方法

这两个协议在现实世界中有着非常不同的用途。

SOAP (使用 WSDL)是一个以文档传递为中心的重量级 XML 标准。这样做的好处是,您的请求和响应可以很好地结构化,甚至可以使用 DTD。缺点是它是 XML,而且非常冗长。然而,如果双方需要有一个严格的合同(比如银行间的沟通) ,这是好的。SOAP 还允许您在文档上分层诸如 WS-Security 之类的东西。SOAP 通常与传输无关,这意味着您不一定需要使用 HTTP。

REST 是非常轻量级的,并且依赖于 HTTP 标准来完成它的工作。让一个有用的 Web 服务快速启动和运行是非常棒的。如果你不需要严格的 API 定义,这就是解决方案。大多数 Web 服务都属于这一类。您可以对 API 进行版本控制,这样对 API 的更新就不会破坏使用旧版本的用户(只要他们指定了版本)。REST 本质上需要 HTTP,并且与格式无关(这意味着您可以使用 XML、 JSON、 HTML 等等)。

通常我使用 REST,因为我不需要特殊的 WS-* 特性。如果您希望计算机使用 WSDL 来理解您的 Web 服务,SOAP 是很好的。REST 规范通常只是人类可读的。

将 WSDL (意为“ SOAP”)视为“重量级”。怎么个重要法?如果工具集为您完成了所有的“繁重工作”,那么为什么它如此重要呢?

我从来不需要使用复杂的 REST API。当我这样做的时候,我希望得到一个 WSDL,我的工具会很高兴地将它转换成一组代理类,这样我就可以调用看起来像是方法的东西。相反,我怀疑为了使用一个非常重要的基于 REST 的 API,需要手工编写大量的“轻量级”代码。

即使完成了所有这些工作,您仍然需要将人类可读的文档转换成代码,因此存在人类读错的风险。由于 WSDL 是服务的机器可读描述,所以“读错”要困难得多。


注意: 自从这篇文章以来,我 have有机会使用一个适度复杂的 REST 服务。我确实希望有一个 WSDL 或者类似的东西,而且我确实需要手工编写很多代码。实际上,开发时间的很大一部分都花在了“手动”删除所有称为不同服务操作的代码副本上。

You can easily transition your WSDL-spewing WCF web components to other uses just by changing your configuration settings. You can go across HTTP and then also named pipes, tcp, custom protocols, etc without having to change your code. I believe WCF components may also be easier to set up for stuff like security, two-way calling, transactions, concurrency, etc.

REST pretty much limits you to HTTP (which is fine in many cases).

REST 不是一个协议; 它是一种架构风格。如果你想要的话,也可以是一个范例。这意味着 SOAP 的定义要宽松得多。对于基本的 CRUD,您可以依赖于标准协议,比如 Atompub,但是对于大多数服务,您将拥有更多的命令。

作为消费者,SOAP 可以是福也可以是祸,这取决于语言支持。由于 SOAP 在很大程度上是以严格类型化的系统为模型的,所以它最适合静态类型化的语言。对于动态语言来说,它很容易变得棘手和多余。此外,客户端库支持在 Java 和。NET

这可能真的属于作为评论在几个以上的职位,但我还没有代表这样做,所以在这里。

I think it is interesting that a lot of the pros and cons often cited for SOAP and REST have (IMO) very little to do with the actual values or limits of the two technologies. Probably the most cited pro for REST is that it is "light-weight" or tends to be more "human readable". At one level this is certainly true, REST does have a lower barrier to entry - there is less required structure than SOAP (though I agree with those who have said that good tooling is largely the answer here - too bad much of the SOAP tooling is pretty dreadful).

Beyond that initial entry cost however, I think the REST impression comes from a combination of the form of the request URLs and the complexity of the data exchanged by most REST services. REST tends to encourage simpler, more human readable request URLs and the data tends to be more digestable as well. To what extent however are these inherent to REST and to what extent are they merely accidental. The simpler URL structure is a direct result of the architecture - but it could be equally well applied to SOAP based services. The more digestable data is more likely to be a result of the lack of any defined structure. This means you'd better keep your data formats simple or you are going to be in for a lot of work. So here SOAP's additional structure, which should be a benefit is actually enabling sloppy design and that sloppy design then gets used as a dig against the technology.

因此,对于在计算机系统之间交换结构化数据的使用,我不确定 REST 在本质上是否优于 SOAP (或者相反) ,它们只是不同而已。我认为上面的 REST 与 SOAP 与动态与静态类型的比较是很好的。动态语言最容易陷入麻烦的地方是系统的长期维护和保养(长期而言,我指的不是一年或两年,而是5年或10年)。随着时间的推移,看看 REST 是否也会遇到同样的挑战,将是一件有趣的事情。我倾向于认为,如果我正在构建一个分布式的信息处理系统,我会倾向于 SOAP 作为通信机制(也是因为它提供了前面提到的传输和应用程序协议分层和灵活性)。

在其他地方,REST 似乎更合适。客户机与其服务器之间的 AJAX (无论有效负载如何)就是一个主要的例子。我不太关心这种类型的连接的寿命和易用性以及灵活性。类似地,如果我需要快速访问一些外部服务,并且我不认为我会关心随着时间的推移交互的可维护性(同样,我假设这是 REST 最终会以某种方式花费我更多的地方) ,那么我可能会选择 REST,这样我就可以快速进出。

无论如何,它们都是可行的技术,并且取决于您想为给定的应用程序做出哪些权衡,它们可以为您提供良好(或糟糕)的服务。

下面的链接提供了关于 WSDL 与 REST 的有用信息,包括优点和缺点

一些关键点是

1) SOAP was designed for a distributed computing environment where as REST was designed for a point to point environment.

2) WADL 可以用来定义 REST 服务的接口。

http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
Http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and-wadl

对我来说,当我们使用“网络服务”这个词时,我们应该小心谨慎。我们应该一直指定我们是否在谈论 SOAP Web 服务、 REST Web 服务或其他类型的 Web 服务,因为我们在这里谈论的是不同的事情,如果我们把它们全部命名为 Web 服务,人们就不再理解了。

Basically SOAP web services are very well established for years and they follow a strict specification that describe how to communicate with them based on the SOAP specification. 现在 REST Web 服务比较新,基本上看起来比较简单,因为它们没有使用任何通信协议。基本上,使用 RESTWeb 服务时发送和接收的内容都是纯 XML。人们喜欢它是因为他们可以按照自己想要的方式解析 xml,而不必处理像 SOAP 这样更复杂的通信协议。

对我来说,REST 服务几乎就像是创建一个 servlet 而不是 SOAPWeb 服务。Servlet 获取数据并返回数据。数据的格式是基于 xml 的。如果需要,我们还可以想象使用 xml 以外的其他内容。例如,可以使用实例标记来代替 xml,而不再使用 REST,而是使用其他东西(可能在权重方面更轻,因为 xml 本质上并不轻)。我们还能称之为网络服务吗?是的,我们可以,但是这不会遵循任何现有的标准,这是主要的问题,如果我们开始称一切为 Web 服务,但是我们可以按照我们想要的方式来做,那么我们正在失去互操作性方面的东西。这意味着与 Web 服务交换的数据格式不再标准化。这就要求服务器和客户端就数据的格式达成一致,而对于 SOAP,这些都是预先定义好的,服务器和客户端可以互操作而不需要了解对方,因为它们遵循相同的标准。

人们不喜欢 SOAP 的地方在于,他们很难理解它,而且不能手动生成查询。然而,计算机可以很好地做到这一点,所以这是我们需要清楚的地方: Web 服务查询和响应是应该直接由终端用户使用,还是我们同意 Web 服务是基于一些规范化标准的计算机系统调用的 API 之下?

SOAP: It can be transported via SMTP also, means we can invoke the service using Email simple text format also

它需要额外的框架/引擎应该在 Web 服务使用者机器中,以将 SOAP 消息转换成各种语言的对象结构。

REST : 现在 WSDL2.0也支持描述 REST Web 服务

We can use when you want to make your service as lightweight, example calling from mobile devices like cell phone, pda etc...

前面的答案包含了很多信息,但是我认为还有一个哲学上的差异没有被指出。SOAP 是“我们如何创建一个现代的、面向对象的、平台和协议独立的 RPC 后继者?”.REST 是从这样一个问题发展而来的: “我们如何利用 HTTP 在网络上取得成功的洞察力,并将它们用于分布式计算?”

SOAP is a about giving you tools to make distributed programming look like ... programming. REST tries to impose a style to simplify distributed interfaces, so that distributed resources can refer to each other like distributed html pages can refer to each other. One way it does that is attempt to (mostly) restrict operations to "CRUD" on resources (create, read, update, delete).

REST 仍然很年轻——尽管它面向“人类可读”的服务,但它并不排除内省服务等或代理的自动创建。然而,这些还没有被标准化(正如我所写的)。SOAP 提供了这些东西,但是(IMHO)“只”提供了这些东西,而 REST 强加的样式由于其简单性已经鼓励了 Web 服务的传播。我个人鼓励新手服务提供商选择 REST,除非有特定的 SOAP 提供的特性需要他们使用。

那么,在我看来,如果您正在实现一个“ greenfield”API,并且对可能的客户端知之甚少,我会选择 REST,因为它鼓励的样式往往有助于使接口易于理解,并且易于开发。如果您对客户机和服务器有很多了解,并且有一些特定的 SOAP 工具可以使这两者都很方便,那么我就不会对 REST 那么虔诚了。

对于您的系统局限于您的公司的企业系统来说,使用肥皂更容易,也更合适,因为您几乎可以控制客户。因为有各种各样的工具可以创建类(代理) ,而且看起来像是在做与 java 或 java 相匹配的常规 OOP。网络环境(大多数公司使用)。

我将使用 REST 作为面向互联网的应用程序来公开接口(比如 twitter api) ,因为客户端可以使用 javascript 或 html 或其他类型不严格的代码。REST 更自由更有意义。

对于面向 Internet 的客户端(World Wide Web)来说,解析静态接口中的 json 或 xml 比纯粹解析肥皂接口中的 xml 更容易。在 javascript 上很难使用代理,而且 javascript 自然不支持对象。如果在 javascript 中使用 REST,通常只需要解析 json 字符串就可以了。面向 Internet 的接口通常非常简单(因此大多数时候它的解析非常简单) ,并且通常不需要一致性,这就是为什么 REST 足够的原因。

对于企业应用程序,我不认为 REST 是足够的,因为事务、安全性、严格类型、模式在企业应用程序开发中发挥着非常重要的作用,这就是 SOAP 更适合它们的原因。

我的结论是 SOAP 适用于企业系统,REST 适用于 Internet 或 WWW。 You can use it interchangeably but you may find yourself having a difficult time eventually not using the correct tool for the job.

抱歉我英语说得不好。

我知道这是一个老的讨论,但是在阅读了所有的答案和评论之后,我相信每个人都忽略了关于两个系统之间差异的最重要的一点: SOAP 使用复杂的类型不仅提供数据,而且验证数据,并将其保持在严格的类型指定中。WSDL 告诉您数据格式是什么,数据类型是什么,允许您添加 reg-ex 模式样式的规则,并定义一段数据在请求/响应中必须以及可能被允许的次数。 Rest on the other-hand has none of these mechanisms.

SOAP 是复杂而繁重的,因为它允许您发送复杂而繁重的分层数据。REST 是纯文本,原点和端点对规则进行排序。

SOAP 是独立于业务的,因为它在文档中嵌入了所有的数据规则。

SOAP 和 REST 之间的区别在于 SOAP 是一个自包含的面向业务的模式,而 REST 是一个文本文档。