Wir kennen das sicherlich alle:

  • 18.05.2011
  • Support
  • 1 Kommentar

Es gibt da eine SOAP-Schnittstelle, mit der man unbedingt etwas klären muss.
Menschen haben es da etwas schwerer als Rechner.

Also dann, man nehme sich kurzerhand einen solchen (Computer) und entscheide, welche Sprache man heute sprechen möchte. Heute, was bei mir eigentlich gestern war, fiel die Wahl auf Python.

Zum Schreiben eines SOAP-Clients bietet sich nach kurzer Befragung des Internet der Inhaber eines äußerst themengerechten, netten Logos an: SUDS

Alles ist etwas simpler, als es am Anfang scheint, nicht umsonst ist der erste Satz auf der offiziellen Seite dieses Frameworks, ich zitiere:

„Suds is a lightweight SOAP python client for consuming Web Services.“

Nicht wesentlich unterhalb dieses Satzes gelangt man auf eine nette „Getting Started“-Doku, die eigentlich alles enthält, was man sich für solch einen Einstieg erwünscht.
Erst einmal importiert man das Framework, oder, in diesem Fall, noch etwas weniger.

from suds.client import Client

Anschließend bastelt man sich einen solchen Client und gibt ihm auch gleich die Adresse des Servers.

client = Client('https://test/foo.bar/service.asmx?WSDL')

Solch ein Server hat sehr genaue Vorstellungen von Gesprächen, daher wird er uns genau sagen, was er in welcher Form gesagt bekommen möchte. Möchte man sich das anschauen, bietet es sich an mit

print client

einen Blick auf diese Anforderungen zu werfen.

Gehen wir nun davon aus, dass wir eine Methode benutzen wollen, die neben einem ganz normalen String auch noch einen komplexen Typ verlangt, eine Authentifizierung. Diese validiert die Berechtigung des Fragestellers mittels zweier Strings, dem Benutzernamen und dem Passwort. Da unser Client den Typ schon kennt, suchen auch wir uns dessen vordefinierten Namen. (Wichtig: Es geht explizit um die Anforderung des Servers, nicht um Typen die Teil von SUDS oder Python wären!)

Nehmen wir an, sein Name ist „AuthData“ und er beinhaltet die beiden Strings „username“ und „password“

auth = client.factory.create('AuthData')

bewirkt, dass eine Variable des Types AuthData nach den Spezifikationen des Servers erstellt wird.

Mit auth.username = 'admin' und auth.password = 'geheim'
(Beispiel für unsichere Zugangsdaten)

werden die Werte gefüllt.

Die Antwort des Servers wird erst zwischengespeichert

result = client.service.HalloServer(auth, 'Hallo')

und dann zum Beispiel mit einem

print result

ausgegeben. Fertig liest sich das dann:

from suds.client import Client
client = Client('https://test/foo.bar/service.asmx?WSDL')
auth = client.factory.create('AuthData')
auth.username = 'admin'
auth.password = 'geheim'
result = client.service.HalloServer(auth, 'Guten Morgen')
print result

Wer wissen möchte, wie so etwas realistisch in Bezug auf die http.net API aussehen würde, kann das Beispiel demnächst auch als Python-Sampleclient auf der API Dokuseite wiederfinden.

Kommentare

sebastian sagt: vor 9 Jahren

Toll. Ein SOAP-Client in RoR würde mich noch interessieren. Ach ja, und Ada! :)

  Auf Kommentar antworten

Einen Kommentar schreiben

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>




* Pflichtfelder
  • Kategorien