sudsを使用してPythonコードからSOAPAPIのメソッドを呼び出しています。APIのメソッドにパラメーターとして送信する情報をプログラムで決定しようとしています。私が見ているWSDLの1つはここにあります。
その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はどうですか?ResultSize?自動生成されたフォームに、int、boolean、またはstringを検証するフィールドを含める必要があるかどうかをプログラムで判断するにはどうすればよいですか?
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」に文字列を割り当てたいことがわかります。しかし、sudを使用してプログラムでこれを理解するにはどうすればよいでしょうか。sudを書いた人がすでにSOAP仕様に厳密に従っているときに、XMLを解析してこれを理解するコードを書くのに何日も費やしたくありませんが、sudに「SortBy」は「文字列」と入力しますか?