【问题标题】:Questions on NVP vs. SOAP Differences and Terminology关于 NVP 与 SOAP 差异和术语的问题
【发布时间】:2010-07-07 20:48:27
【问题描述】:

我经常使用 3rd 方网络服务。我要寻找的第一件事是他们是否提供了一个 WSDL,我可以轻松地将其添加到 Visual Studio 中并立即开始使用 VS 基于 WSDL 创建的自动生成的代理类,显然我能够快速开始编码并开始使用任何第 3 项派对 API。

例如,PayPal 提供了 2 种风格的 API。一个通过名称值对和另一个 SOAP,它公开了一个 WSDL,我可以在我的 .NET 项目中使用它,然后我就走了。

那么我可以假设以下关于术语的情况吗?

  1. NVP 不提供 WSDL(通过 HTTPRequest 中传递的查询字符串名称值对完成)
  2. SOAP Web 服务可能始终提供也可能不提供 WSDL 供您合并到项目中以便使用
  3. REST 只是一种命名发明,可应用于 NVP 或 SOAP/WSDL 类型的 API
  4. 是 API 还是 SDK?我总是提到我正在访问的服务并对“API”进行 API 调用,但出于某种原因,我的老板称它为 SDK,这对我来说没有意义……API 是我在那里看到最多的

我不太确定我的陈述是否 100% 正确,需要澄清这一点。

【问题讨论】:

    标签: c# web-services rest wsdl


    【解决方案1】:
    1. NVP 不提供 WSDL(通过 HTTPRequest 中传递的查询字符串名称值对来完成)

    PayPal 所称的名称-值-对不是标准。然而,他们并不是唯一使用它的人(似乎)。它基本上是以名称和值对的形式发送参数(显然),这很容易以编程方式处理,因为 HTML 表单做同样的事情,所以通过发送 NVP,您正在模拟 Web 表单,服务器端编程是相同的。

    总之,称它为NVP比说:请使用application/x-www-form-urlencoded更容易。

    1. SOAP Web 服务可能始终提供也可能不提供 WSDL 供您合并到项目中以便使用

    理论上,是的。 SOAP 作为协议不强制使用 WSDL 进行定义/描述。它仅描述客户端和服务器(和/或中介)之间的消息。但实际上,SOAP Web 服务的概念通常意味着使用 WSDL 描述并使用 SOAP 进行消息交换的 Web 服务。几乎所有可用的软件(.Net、Java 和 gSOAP C/C++ 等其他软件)都通过 WSDL 定义 Web 服务。可以使用工具将预定义的类转换为 WSDL,反之亦然,SOAP 通常由库支持处理。

    简而言之,通过从 WSDL 生成类来使用 Web 服务的方式是标准方式。虽然 SOAP 定义了交换的消息,但如果没有服务的定义(在 WSDL 中),它就不是 Web 服务,因为没有服务合同。

    1. REST 只是一种命名发明,可应用于 NVP 或 SOAP/WSDL 类型的 API

    REST 当然不是一种命名约定,它是一种架构风格,主要围绕资源和指向它们的超链接的概念构建。周围有很好的解释,但您可以在很大程度上通过风格来识别它:您使用一小组动词(通常是 HTTP:GET、POST、PUT、DELETE 或其中的一部分)来实现您想要对资源执行的操作。识别它们的简单方法是:

    1. 地址表示资源,因此与其将销售、授权和订单等操作作为请求的一部分发送,您将处理看起来像 http://www.example.org/Sales/sale-015http://www.example.org/orders/1337 的不同地址,您可以使用 GET 或使用 DELETE 删除或根据需要使用 PUT 或 POST 进行修改。

    2. REST 请求的响应通常包含相关链接,您可以将其用于潜在的下一步操作。因此,销售的响应消息可能包含使您能够确认销售的链接。

    如果正确实施,REST 会为客户端和服务器提供更大的修改空间。相比之下,SOAP Web 服务客户端和服务器必须遵守定义为互操作的 WSDL 合同。

    1. 是 API 还是 SDK?我总是提到我正在访问的服务并对“API”进行 API 调用,但出于某种原因,我的老板称它为 SDK,这对我来说没有意义……API 是我在那里看到最多的

    API(应用程序编程接口)是可从外部访问的已定义函数列表,因此定义了一个接口。 SDK(软件开发工具包)是一组用于开发软件的软件工具和库。所以如果你下载的是SDK的可执行代码;如果是 API 文档。

    Paypal 提供了一个 API。相比之下,要为 iPhone 开发软件(仅举个例子),您必须从 Apple 下载 iPhone SDK。

    【讨论】:

    • 谢谢。我认为有些人不提供 SOAP 而只提供 application/x-www-form-urlencoded 很奇怪
    • Facebook 不提供 WSDL,我就是不明白。为什么不支持大多数人都想使用的主要网络服务类型?
    • 基本上,它们是 Web 服务的不同方法。如果您采用像Amazon S3 这样同时具有 REST 和 SOAP API 的 API,那么使用 REST 并不比使用 SOAP 难。 WSDL 有帮助,但您仍然需要阅读文档。过去,亚马逊为其服务提供了 SOAP 和 REST API,并且超过 80% 的开发人员使用 REST 之一。所以,并不是大多数人都想使用 SOAP。
    • REST 与 SOAP 是一个完整的讨论,可在其他地方找到。使用 IDE(如 Visual Studio)和静态语言的人往往会喜欢 SOAP。以我的经验,它使您对互操作性产生一种错误的感觉,因为不同软件对 WSDL 合同的解释方式略有不同。我不得不使用 Apache Axis (Java)、.Net (C#)、C (gSOAP) 和各种 Python 库,最近还使用了一种用于化学信息学的名为 Pipeline Pilot 的软件。让我告诉你,这并不像理论所说的那么容易。
    • 一个基本的区别:在 SOAP Web 服务中任何事情都会发生,所以你必须编写一个契约 (WSDL)。许多其他 Web 服务都有一个标准合同,而不是服务器提供的合同:大多数博客导出 xml-api 服务以进行发布;网络提要使用 Atom(或 RSS)发布; REST 服务通常使用 HTTP 作为它们的契约。使用每个人都知道的合同比为每个服务创建一个新合同更有用和更容易。我应该在这里停下来。如果您仍然感兴趣,可以浏览相关问题。或者问。
    【解决方案2】:

    所有 SOAP Web 服务都应提供 WSDL。他们不需要通过 URL 在线提供。 Web 服务供应商可能会通过电子邮件或其他渠道向您发送 WSDL。重要的是应该有一个 WSDL 来描述服务。

    “NVP”只是 PayPal 和其他一些人正在使用的东西。这不是某种标准。

    REST 是独立的架构风格。见SOAP or REST

    【讨论】:

    • 嗯,NVP 没有可用的 WSDL。
    • NVP 没有使用 SOAP,它使用的是查询字符串参数而不是 SOAP / WSDL
    • 我错了吗??如果我错了,请纠正我……但这是我的经验。我只是无法验证我陈述的术语是否正确,但这就是我在使用这两种类型的 API 时看到的情况
    • 我还没有将“NVP”视为 Web 服务的一般架构风格。我认为您可能过于笼统 - 您所谓的“NVP”可能被少数服务使用,但在整个行业范围内没有足够的服务将其视为一种架构风格,就像对 RPC 所做的那样( SOAP) 和 REST。
    • 谢谢约翰。这次我同意了另一个人的回应。我得到了更多关于我正在寻找的东西,但感谢您的时间。
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 2014-08-31
    • 2010-12-03
    • 2011-10-11
    • 1970-01-01
    • 2014-08-01
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多