V2和WSI Magento SOAP接口做什么?



Magento有一个可以通过SOAP和RPC访问的"Webservices API"。

这里的术语有些混乱,因为SOAP(或RPC) API本身只公开了8个方法。要访问Magento API中的方法,您需要调用SOAP API方法call,然后传入一个字符串,该字符串指示您真正想要调用的方法(如catalog_product.info)

多年来,Magento团队引入了两个额外的API后端,SOAP V2和SOAP WSI。引入这些后端是"为了增加。net和Java的兼容性"

这到底是什么意思?从代码的角度来看,这些api改变了公开的WSDL,当使用PHP的SOAP客户端时,整个call就消失了。你在客户端上调用实际的方法去了

$client->call($session, 'catalog_product.info',...);
vs.
$client->catalogProductInfo($sessionId, ...

我一直不清楚这是如何提高。net或Java兼容性的(因为我不熟悉这些工具链)。

这只是一个代码生成方便/文化的东西,还是说。net和Java用户实际上不可能使用原始的SOAP API?

总体上有什么改善?

WSDL描述的SOAP服务的构建块大致如下:

  • Contract:由wsdl:portType、wsdl:message和wsdl:type指定,描述操作以及这些操作的消息和类型。这告诉我们:服务能做什么?

  • Binding: wsdl: Binding将wsdl:portType绑定到具体的传输、文档样式、策略等。这告诉:如何与服务通信?

  • Address: wsdl:service部分将wsdl:绑定链接到具体的服务端点地址。这回答:服务在哪里?

上述几点或多或少是Windows通信基金会(WCF)的abc原则。

所以magento的第一个rpc方法只是对SOAP协议的滥用。通过少数入口函数的密钥孔的每个请求都有另一个包装的RPC协议作为消息有效负载。所以SOAP只是用作消息传输,就像SOAP使用的一样。http - post。为了保持合约的有效性,它要么非常复杂(大量可能的消息),要么非常通用(简单的字符串)。如果每个方法/操作都有自己的声明,契约就会变得容易得多。这就是V2 API的作用。

但是为什么这也是静态类型语言(如Java或c#)的一大改进呢?

就像macki提到的,有针对这些语言的工具(代理生成器等)和框架(如WCF或JAX-WS)。它们根据上面提到的用于消息类型和方法调用代理的契约数据传输对象(DTO)生成(它们做的更多,但在这里并不重要)。正如您在Magento Wiki上看到的,Magento soap v2 api实例化了一个filters-object和salesOrderList代理方法。契约的很大一部分是基于方法及其参数的静态类型的。如果你想使用V1的锁孔方法,你必须自己在一个更任意的数据结构中构建消息来满足合约,比如字符串、字符串数组或字符串字典。

所以当然可以使用静态类型语言的旧API,但感觉不对。最好是每个消息类型都有一个类型和操作代理的静态类型签名。除此之外,无论您使用哪种语言调用它们,V2都是更好的SOAP服务。

据我所知,至少在。net中,您必须手动完成所有工作(因为没有可用方法的WSDL规范),而在V2中,您可以使用各种"向导"one_answers"WSDL导入器"来创建具有正确数据类型和名称的代理类。使编码更容易。此外,原始方法的复杂数据类型也存在一个问题——它们很难直接处理。

有105个Magento SOAP v2函数api,您应该了解它们的使用和应用。首先转到Magento SOAP,了解如何创建SOAP客户机和登录。请查看SOAP API v2的简要描述。然后从PHP CLI(通过命令行)或PHP CGI(通过Web浏览器)各自的脚本引擎运行以下代码。

$client = new SoapClient('http://mymagentohost/soap/api/?wsdl');
// If some SOAP APIs require API authentication, then get a session token
$session = $client->login('apiUser', 'apiKey');
foreach($client->__getFunctions() as $function)
    echo "function: $function".PHP_EOL;   // or .<br> if running the PHP from your Web browser

将SOAP v2 API函数列表剪切并粘贴到文本文件中并保存。你会发现API列表是无价的,所以你会想随身携带。

最新更新