名称值对SOAP / WSDL的优点

时间:2010-01-13 21:00:03

标签: web-services rest soap wsdl asmx

我看到PayPal等API提供使用NVP或SOAP / WSDL调用他们的服务。当使用.NET环境(3.5)使用传统的Web服务(没有WCF)哪个更好,为什么?我知道WSDL允许您放入API URL并为您生成包装器。那么为什么公司甚至会提供NVP?

3 个答案:

答案 0 :(得分:23)

对于不同类型的Web服务,这个行业似乎永无止境的混乱。

SOAP是消息传递协议。与REST一样,它与苹果有草坪拖拉机一样多。您希望在消息传递协议中使用的一些内容是:

  • 标题和其他非内容“属性。”
  • 寻址 - 根据标题将邮件路由到不同的服务器/收件人;
  • 通过排队和其他方法保证交付;
  • 加密,签名和其他安全功能;
  • 交易和编排;
  • 在单个消息中准确表示复杂的结构化数据;

......等等。这不是一个详尽的清单。 WSDL主要添加到SOAP的是:

  • 通过合同的可发现性,这是一种机器可读的“文档”形式,它告诉消费者发送消息所需的确切内容并允许代理自动生成; < / p>

  • 对消息进行严格的自动架构验证,与XSD适用于XML的方式相同。

REST 是一种消息传递协议。 REST是资源操作的系统。由于其他答案所概述的几个重要原因,它是许多架构的可靠选择。它与PayPal和flickr等“NVP”服务几乎没有任何关联。

PayPal的NVP API不是REST。对于不支持或难以支持SOAP的客户端,它是基于HTTP POST的替代RPC类消息传递协议。这不是我的意见,这是对事实的陈述。 NVP中的一个字段实际上是METHOD。这是明显 RPC的措辞。看一下他们的UpdateRecurringPaymentsProfile的API,并试着告诉我,这有点讽刺,可以形容为“资源”。它不是资源,而是操作

在PayPal的情况下,“NVP”(HTTP POST)API几乎在所有方面都不如SOAP API。它适用于不能使用SOAP的消费者。如果可以使用它,那么你肯定

我也不一定要抨击PayPal。我知道很多人都因为没有把“正确的”RESTful API放在一起而抨击他们,但这不是我所得到的。并非使用REST可以准确描述世界上的每项服务。 PayPal实际上不是一个基于资源的系统,它是一个事务性系统,因此我可以原谅他们的架构师和开发人员没有完美优雅的REST架构。这也许值得商榷,但它不是黑白的。没关系;如果需要,我只会使用SOAP系统。

将此与Twitter API进行比较。这是一个真正的REST服务。您可以在此API上执行的每个“操作”都被准确地描述为检索或提交特定类型的资源。资源是推文,状态,用户。在这种情况下,使用复杂的SOAP API毫无意义,因为你并不真正发送消息,你没有执行事务,你只是要求特定的事物,这些事物可以用一个URL来描述。唯一的区别是,不是获取HTML网页,而是获得一些XML或JSON数据;你提出要求的方式完全一样。

REST Web服务通常(总是?)使用HTTP GET来检索某些资源。 Twitter正是这样做的。 GET仍然使用“名称 - 值对” - 这是查询字符串?q=twitterapi&show_user=true?之后的那些位是名称 - 值对。这里有一个很好的例子,说明为什么要使用REST而不是SOAP;您可以将其连接到RSS源并获取流式更新。我可以把它变成Firefox中的Live Bookmark。或者我可以以JSON格式下载它并将其绑定到类似jqGrid的东西。有趣的是,请求不是使用“Name-Value Pairs”;有趣的是,它是一个简单的URL,可以被知道如何请求网页的任何东西使用。

因此,试着总结一下我所说的一切,用这种方式来思考:

  • 如果要将数据公开或使用或发布,请使用REST API(如果可用)作为永久资源。

  • 当系统本质上是事务性的和/或当您需要复杂消息传递协议可以提供的高级功能(如RM和寻址)时,请使用SOAP API。

  • 当没有SOAP API或者您无法使用SOAP API时,使用RPC API(其中包括几乎完全围绕HTTP POST建模的任何API)。

希望能够解决一些困惑。

答案 1 :(得分:0)

我认为通过Name Value Pairs,你的意思是REST服务。

REST的好处主要是易于开发,简单和优雅,以及较低的开销(如果您发送和接收大量小消息,这非常重要)。

以下是REST的一些优点:

  • REST更轻量级
  • 人类可读的结果
  • 一切都是URI可寻址资源
  • 更容易缓存REST服务
  • REST更容易构建(不需要工具包)
  • REST更容易调用(HTTP - GET,POST,PUT,DELETE)

答案 2 :(得分:0)

NVP是HTTP POST

name=fred
amount=100
code=403

这是任何HTML浏览器的默认格式,因此实现将数据发送到Web服务非常简单

我不认为这是从Web服务接收数据的好格式吗? JSON或XML更合适

不是每个人都使用VisualStudio,或者可以访问自动包装器生成器,或者想要使用这样的野兽

许多Web mashup都是用Javascript编写的,因此使用HTTP POST发送数据是最简单的方法。返回结果是标准HTML响应代码(200,403,500等)和/或一些JSON

许多服务提供商提供多种API以满足所有客户的需求