8

我正在使用 suds 从我的 Python 代码调用 SOAP API 中的方法。我正在尝试以编程方式确定将哪些信息作为参数发送给 API 中的方法。我正在查看的 WSDL 之一是here

该 WSDL 中定义了一个具有以下签名的方法:

GetActiveDirectoryObjects(FilterOptions filterOptions)

我可以使用 suds 为这个 WSDL 创建一个客户端,然后我可以使用 client.factory.create() 方法,如下所示:

from suds.client import Client
client = Client('https://controlpanel.msoutlookonline.net/WebServices/ActiveDirectory/ActiveDirectoryService.asmx?WSDL')
client.factory.create('FilterOptions')

输出是:

(FilterOptions){
   AttributesToRead =
      (ArrayOfString){
         string[] = <empty>
      }
   SortBy = None
   SortDirection =
      (SortDirection){
         value = None
      }
   ResultSize = None
   Filter =
      (AndOperation){
         ExtensionData = None
      }
   SearchBase = None
 }

我不知道如何使用 suds 确定“SortBy”是否要分配一个字符串、一个 int 或一个布尔值,或者什么。我知道“AttributesToRead”想要分配一个“ArrayOfString”。我知道“SortDirection”想要分配一个“SortDirection”类型的对象。但是 SearchBase 呢?结果大小?我的程序如何确定自动生成的表单是否应该包含一个验证 int 或 boolean 或字符串的字段?

查看 WSDL XML,我看到以下内容:

<s:complexType name="FilterOptions">
    <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="AttributesToRead" type="tns:ArrayOfString"/>
        <s:element minOccurs="0" maxOccurs="1" name="SortBy" type="s:string"/>
        <s:element minOccurs="1" maxOccurs="1" name="SortDirection" type="tns:SortDirection"/>
        <s:element minOccurs="0" maxOccurs="1" name="ResultSize" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="Filter" type="tns:AndOperation"/>
        <s:element minOccurs="0" maxOccurs="1" name="SearchBase" type="s:string"/>
    </s:sequence>
</s:complexType>

所以我通过手动读取 XML 知道“SortBy”想要分配一个字符串——但是我如何使用 suds 以编程方式解决这个问题?我不想花几天时间编写解析 XML 的代码来弄清楚当编写 suds 的人已经密切遵循 SOAP 规范时 - 但是让 suds 告诉我“SortBy”应该是什么的秘诀是什么?输入“字符串”?

4

0 回答 0