Vraag Python SOAP Client - gebruik SUDS of iets anders?


Ik ben momenteel bezig met het implementeren van een client die een bestaande uitgebreide SOAP-beheer-API zal gebruiken.

Ik keek naar verschillende SOAP-implementaties zoals pysimplesoap en ZEEPSOP. Terwijl de eerste problemen had met het parseren van de WSDL vanwege te veel recursies, werkte het schuim prima (maar traag) en ik hou echt van de module.

Er zijn echter verschillende problemen met SUDS, zoals het hoge geheugengebruik, de WSDL-parseersnelheid en ontbrekende ondersteuning voor sommige WSDL-kenmerken (bijv. Keuzekenmerk).
Hoewel er veel mensen zijn die actief bugrapporten en patches maken, was dat wel het geval geen release van SUDS sinds 0.4 op 2010-09-15. Ook de wiki en de routekaart lijken een beetje verwaarloosd.

Voor mij lijkt het erop dat SUDS niet langer wordt onderhouden.

Dus hier mijn vragen:

  1. Is het logisch om een ​​groter project te baseren op zeep als zeepclient?
  2. Is er een schuimvork die al enkele van de beschikbare patches implementeert in het ticketingsysteem?
  3. Welke alternatieven zijn er beschikbaar, die een lagere geheugenvoetafdruk hebben en gemakkelijk te gebruiken zijn en kunnen complexe grote WSDL-bestanden verwerken

[Update november 2013]

Meer dan twee jaar zijn verstreken en het blijkt dat het oorspronkelijke schuimproject echt dood is. Sinds 2010 zijn er geen nieuwe releases. Vanwege dit feit begonnen veel mensen met het analyseren van sop en distribueren distributies zoals Debian gepatchte versies van het originele schuimpakket om een ​​aantal problemen op te lossen.

Ik kan Jurko's actief onderhouden vork aanraden die ik met succes heb gebruikt. Het ondersteunt python 3 en verhelpt veel bekende problemen van zeepsop. Release-opmerkingen en bug-tracker zijn beschikbaar op BitBucket het pakket is ook beschikbaar op PyPI dus het kan worden geïnstalleerd met behulp van pip.


58
2017-10-12 11:49


oorsprong


antwoorden:


Hoewel er geen gecertificeerde norm is, is Suds de beste keuze als u SOAP moet gebruiken. Op grote WSDL's kan opschuimen traag zijn en daar werken ze aan.

Als u in de tussentijd niet verwacht dat uw WSDL vaak zal veranderen, heeft u twee opties die u veel snelheid kunnen kopen:

  1. Uw WSDL downloaden naar localhost
  2. Caching gebruiken

Uw WSDL downloaden

Bij grote WSDL's is een deel van het probleem dat je als eerste elke keer de WSDL moet downloaden, wat overhead kan toevoegen. Suds zal bij het opstarten de tijd nemen om de volledige WSDL te downloaden en te analyseren om er zeker van te zijn dat deze niet is gewijzigd.

Als u het naar het lokale systeem kunt downloaden en doorgeven aan de Client constructor met behulp van een file:// schema in de URL. Omdat Suds gebruikt urllib2 voor het HTTP-transport is dit volkomen legitiem.

Omdat u nu geen hostnaam in uw WSDL-URL opgeeft, moet u ook een location argument dat de werkelijke URL van de SOAP-toepassing opgeeft.

Hier is een voorbeeld:

from suds.client import Client

# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'

# The WSDL URL, we wont' use this but just illustrating for example. This 
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl' 

# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url

client = Client(url=wsdl_url, location=soap_url)

Als je geïnteresseerd bent, heb ik deze benadering gebruikt in mijn werk en heb open source de code.

Uw WSDL opslaan in de cache

De andere optie is om Suds te gebruiken uitstekende cachefunctie. U moet expliciet een cache-object maken en dat vervolgens doorgeven aan de constructor met behulp van de cache argument. Anders is het standaard een ObjectCache met een duur van 1 dag.

U kunt ook overwegen om beide benaderingen te gebruiken.


45
2017-10-21 17:23



Er wordt een nieuwe, goed onderhouden SOAP-client genoemd zeep. Het ondersteunt zowel Python 2 als 3 en is gebaseerd op bekende lxml- en verzoekenbibliotheken.


9
2018-05-13 10:42



Een interessant up-to-date bericht is hier te vinden: Welke SOAP-clientbibliotheken bestaan ​​er voor Python en waar is de documentatie voor hen? Helaas lijkt de perfecte SOAP-bibliotheek waarnaar u op zoek bent (nog) niet te bestaan


7
2017-10-18 15:03



Het is 2013. Dit is een update voor iedereen die het probleem met Python en SOAP heeft ontmoet zoals ik.

Ik probeerde SOAP te gebruiken in Python. Ik heb zeepsop geprobeerd, maar helaas is de bibliotheek niet bijgewerkt sinds 2010. In de eerste test van mijn code ontving ik de volgende foutmelding:

RuntimeError: maximum recursion depth exceeded while calling a Python object

Dat blijkt een probleem te zijn met recursieve verwijzingen op HTTPS-verbindingen. Zie het antwoord van drfence. Ik moest met de hand schuimen om dat probleem te omzeilen.

Ik schakelde in plaats daarvan over naar php. Niet zo eenvoudig als python, maar ik kon het laten werken.


5
2018-05-24 19:05