通过pysimplesoap处理SOAP调用

SOAP

SOAP这货我在十几年玩过,当时算是一个很有意思的东西,但是后来就不用了,XML太笨重,哪有RESTful轻便。

但是因为工作需要,经常需要与别的系统交互,很多还在用SOAP,所以没办法,还是得对接一下。

python处理SOAP并不复杂,有很多现成的库可以用,我自己习惯是用pysimplesoap。

只是因为每次都是自己做一个封装来用,所以需要处理SOAP的时候并不多,以致于每次碰到新的接口都要回想半天怎么开始入手,这回干脆还是记录一下,省得麻烦。

WSDL

SOAP的一大好处就是WSDL,直接打开就可以看到接口定义,但是如何用pysimplesoap调用,却并没有这么直观。

先来看一下一般的WSDL在pysimplesoap里是如何组织的:

from pysimplesoap.client import SoapClient

client = SoapClient(wsdl='url_for_wsdl')

这样打开wsdl以后就可以在client.services里看到一个WSDL定义结构。其核心部分是:

svc = client.services['XXXXService']['ports']['XXXXServiceSoap']

其中XXXX就是这个服务提供者的名字。再来看这个服务具体提供了哪些API调用:

svc['operations'].keys()

每个API调用对应的参数和返回值:

svc['operations']['API1']['input']['API1']
# 示例返回: API1 {param_name: str}

svc['operations']['API1']['output']['API1Response']
# 示例返回: API1Response {result_name: str}

当然,以上信息也可以直接从WSDL响应里看出来,看各人习惯了。

调用方法

res = client.API1(param_name="hello")
print(res['result_name'])

推送到[go4pro.org]