将Python与Suds或Zeep等SOAP客户端一起使用,如果我有一个将params定义为ref或out的API,我该如何定义它们并读取它们。
e.g。一个c#方法定义如下:
// this is c# code...
bool MyApi(
string regularParam1,
int regularParam2,
ref string refParam3, // set by caller, changed by service,
// used as part of the result
out string outParam4) // marked as 'out', caller not to set any value,
// changed by service and used as part of the result
肥皂看起来如此:
<soap:Body>
<MyApi xmlns="http://mywebservice.myapi.com/">
<regularParam1>string</regularParam1>
<regularParam2>int</regularParam2>
<refParam3>string</refParam3>
<outParam4>string</outParam4>
<soap:Body>
<MyApiResponse xmlns="http://mywebservice.myapi.com/">
<MyApiResult>bool<MyApiResult>
<refParam3>string</refParam3>
<outParam4>string</outParam4>
我认为(但不确定)ref param和out param都期望一个将接收结果的对象。 out
内容应为“空”,ref
对象的内容可以包含值。我不知道这是如何在内部工作的。
我经历了the list of Python SOAP frameworks in Samat Jain's excellent answer on a different SO question但未在任何列出的框架中找到关于该主题的讨论。
问题是python中没有ref
或out
参数。
相反,python函数调用可以返回多个值,单个argurments可以包含多个值(即元组)。但是,当它在服务中和SOAP中定义时,我该怎么做?
一个。如何在调用客户端中定义这些参数?我是否必须做一些特殊的事情,或者只是创建常规参数?
湾如何自动获取生成的额外字段(定义后)?或者我必须阅读生成的SOAP xml并自己解析它吗?
注意:这些out
和ref
参数是结果的一部分,但不是return-value
的一部分,在上面的示例中,它是一个简单的布尔值。
℃。如果在Zeep或SUDS中无法做到这一点,还有其他一些可以实现的框架吗?
有similar unanswered SO question(我为了清晰起见而编辑),但它特定于可能由未正确定义的ref参数引起的Zeep错误。