端点 URL 如下所示(不是实际的 URL( https://webservices.abcde.com/ThirdParty/PostData.V55.ashx/ProcessRequest
它没有 WSDL,在文档中,有一个示例请求 XML。
这是巨大的。我在下面添加其中的前几行。
<MESSAGE xmlns:agentnet="http://services.abcde.com/entity/agentnet/v2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.mismo.org/residential/2009/schemas/v32">
<ABOUT_VERSIONS>
<ABOUT_VERSION>
<AboutVersionIdentifier>ClientSystem</AboutVersionIdentifier>
<DataVersionIdentifier>1.0</DataVersionIdentifier>
<DataVersionName>ASDFSFD</DataVersionName>
</ABOUT_VERSION>
</ABOUT_VERSIONS>
<DEAL_SETS>
<DEAL_SET>
<DEALS>
<DEAL>
<PARTIES/>
<SERVICES>
<SERVICE>
<SERVICE_PRODUCT>
<SERVICE_PRODUCT_REQUEST>
<EXTENSION>
<OTHER>
<agentnet:AGENTNET_PRODUCT_REQUEST>
<agentnet:AgentNetServiceType>GET_DATA</agentnet:AgentNetServiceType>
<agentnet:AGENTNET_GET_DATA>
<agentnet:GetRequestType>ACCOUNTS</agentnet:GetRequestType>
</agentnet:AGENTNET_GET_DATA>
</agentnet:AGENTNET_PRODUCT_REQUEST>
...
...
...
...
... (the XML is huge)
对于其他端点,我能够使用像savon
这样的 SOAP 库来使用一个小的 Ruby Hash(字典(生成 XML 有效负载。
我认为这是可能的,因为那些是WSDL?
是否可以通过仅传递一些基本数据(例如,示例中的GET_DATA
和ACCOUNTS
(以相同的方式生成有效负载,还是应该手动构造 XML 有效负载字符串(也许使用某些 XML 库(?
我真的想避免手动构造 XML 有效负载,因为代码将不可读并且通常难以使用。有没有办法避免它?
您可以在不使用 WSDL 的情况下最终创建 Savon 客户端。我个人更喜欢这个,因为我相信它的性能更高。
创建客户端时,您必须定义endpoint
和namespace
,如以下虚构示例:
require 'savon'
c = Savon.client(endpoint: "http://www.example.com",
namespace: "urn:ns.example.com",
log: true,
log_level: :debug,
pretty_print_xml: true)
r = c.call(:call,
:message => {
:InquiryParam => [
{"crmParam" => 123,
:attributes! => { "crmParam" => { "name" => "AccountNumber" }}},
{"crmParam" => 456,
:attributes! => { "crmParam" => { "name" => "history" }}}
]
}
)