我看到PayPal等API提供使用NVP或SOAP / WSDL调用他们的服务。当使用.NET环境(3.5)使用传统的Web服务(没有WCF)哪个更好,为什么?我知道WSDL允许您放入API URL并为您生成包装器。那么为什么公司甚至会提供NVP?
答案 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的一些优点:
答案 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以满足所有客户的需求