Magento有一个“Webservices API”,可通过SOAP和RPC访问。
这里的术语变得棘手,因为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?
答案 0 :(得分:3)
WSDL描述的SOAP服务的构建块大致是:
合同:由wsdl:portType,wsdl:message和wsdl:type指定,用于描述操作以及这些操作的消息和类型。所以这说明:该服务可以做什么?
绑定:wsdl:绑定将wsdl:portType绑定到具体的传输,文档样式,策略等。这告诉:如何与服务通信?
地址:wsdl:service部分将wsdl:binding链接到具体的服务端点地址。这回答:服务在哪里?
上述几点或多或少是Windows Communication Foundation(WCF)的ABC原则。
因此,magento的第一个RPC方法只是滥用SOAP协议。每个通过少数入口函数的密钥孔的请求都有另一个包装的RPC协议作为消息有效负载。所以SOAP只是用作消息传输,就像SOAP使用的那样。 HTTP-POST。为了保持合同有效,它必须非常复杂(大量可能的消息)或非常通用(只是一个字符串)。如果每个方法/操作都有自己的声明,那么合同就会变得容易多了。这就是V2 API的功能。
与macki提到的一样,这些语言有工具(代理生成器等)和框架(如WCF或JAX-WS)。它们根据上面提到的合同数据传输对象(DTO)生成,用于方法调用的消息类型和代理(它们做得更多,但这里并不重要)。正如您在Magento Wiki on C# magento soap v2 api中看到的那样,实例化了filters-object和salesOrderList代理方法。合同的很大一部分是基于方法的静态类型及其参数。如果你要使用V1锁孔方法,你必须自己构建消息,以便在一个更为随意的数据结构(如字符串,字符串数组或字符串字典)中满足合同。
当然,可以使用静态类型语言中的旧API,但感觉不对。拥有每个消息类型的类型和操作代理的静态类型签名要好得多。除了你用它调用的语言之外,V2也是更好的SOAP服务。
答案 1 :(得分:1)
据我所知,至少在.NET中使用原始文件,你必须手动完成所有操作(因为没有可用方法的WSDL规范),而使用V2,你可以使用各种“向导”和“WSDL导入器”将创建具有正确数据类型和名称的代理类。使代码更容易。使用原始方法的复杂数据类型也存在问题 - 它们很难直接使用。
答案 2 :(得分:1)
有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列表非常宝贵,因此您需要保持方便。