Web services 名称-值对到SOAP/WSDL的优点

Web services 名称-值对到SOAP/WSDL的优点,web-services,rest,soap,wsdl,asmx,Web Services,Rest,Soap,Wsdl,Asmx,我看到PayPal等API提供使用NVP或SOAP/WSDL调用其服务。当使用.NET环境(3.5)使用传统web服务(没有WCF)时,哪一个更好?为什么?我知道WSDL允许您输入API URL,并为您生成包装器。那么,为什么公司甚至提供NVP呢?我假设,通过名称-值对,您指的是REST服务 REST的好处主要是易于开发、简单和优雅,以及较低的开销(如果发送和接收大量小消息,这一点非常重要) 以下是REST的一些优点: 休息更轻 可读结果 一切都是URI可寻址资源 REST服务更容易缓存 RE

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

我假设,通过名称-值对,您指的是REST服务

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

以下是REST的一些优点:

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

    • NVP是HTTP POST

      name=fred
      amount=100
      code=403
      

      这是任何HTML浏览器的默认格式,因此将数据发送到web服务很容易实现

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

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

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


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

      在这个行业中,对于不同类型的web服务似乎存在着永无止境的困惑

      SOAP是一种消息传递协议。它和休息有很多共同点,就像苹果和草坪拖拉机一样。您希望在消息传递协议中实现的一些功能包括:

      • 标题和其他非内容“属性”
      • 寻址-根据邮件头将邮件路由到不同的服务器/收件人
      • 通过排队和其他方式保证交付
      • 加密、签名和其他安全功能
      • 交易和编排
      • 在单个消息中精确表示复杂的结构化数据
      ……等等。这不是一份详尽的清单。WSDL添加到SOAP的主要内容是:

      • 通过合同的可发现性,一种机器可读的“文档”形式,告诉消费者发送消息所需的确切信息,并允许自动生成代理

      • 严格、自动化的消息模式验证,与XSD处理XML的方式相同

      REST不是消息传递协议。REST是一个由资源行动组成的系统。对于许多体系结构来说,它是一个可靠的选择,正如其他答案所概述的几个重要原因。它与PayPal和flickr等“NVP”服务也几乎没有关联

      贝宝的NVP API不是REST。对于不支持或难以支持SOAP的客户端,它是一种类似RPC的HTTP
      POST
      消息传递协议。这不是我的意见,这是事实的陈述。NVP中的一个字段实际上是
      方法
      。这显然是RPC的废话。看一看他们的API,试着告诉我,将其描述为“资源”有点道理。这不是一种资源,而是一种行动

      特别是在PayPal的情况下,“NVP”(
      HTTPPOST
      )API几乎在所有方面都不如SOAP API。它是为那些不能使用肥皂的消费者准备的。如果你能使用它,你绝对应该

      我也不一定要为此抨击贝宝。我知道很多人抨击他们没有构建一个“合适的”RESTful API,但这不是我想要表达的意思。并不是世界上的每一项服务都能用REST准确描述。PayPal不是一个真正基于资源的系统,它是一个事务系统,所以我可以原谅他们的架构师和开发人员没有一个完美优雅的REST体系结构。这也许是有争议的,但它不是黑白的。很好,;如果需要的话,我会使用SOAP系统

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

      RESTWeb服务通常(总是?)使用HTTP
      GET
      来检索某些资源。Twitter就是这样做的
      GET
      仍然使用“名称-值对”-这是查询字符串,
      ?q=twitterapi&show\u user=true
      后面的那些位是名称-值对。这是一个很好的例子,说明了为什么您希望使用REST而不是SOAP;您可以将其连接到RSS提要并获取流式更新。我可以在Firefox中将它变成一个实时书签。或者我可以下载JSON格式的文件,并将其绑定到jqGrid之类的东西上。有趣的不是请求使用“名称-值对”;有趣的是,它是一个简单的URL,任何知道如何请求网页的人都可以使用它

      因此,为了尝试总结我所说的一切,请这样想:

      • 当您希望将数据公开、消费或发布为永久资源时,请使用REST API(如果可用)

      • 当系统本质上是事务性的时,使用SOAP API