2011-10-12 11 views
57

मैं वर्तमान में एक ग्राहक को लागू करने की तलाश में हूं जो मौजूदा व्यापक एसओएपी प्रबंधन API का उपयोग करेगा।पायथन SOAP क्लाइंट - एसयूडीएस या कुछ और उपयोग करें?

मैंने विभिन्न एसओएपी कार्यान्वयन जैसे pysimplesoap और SUDS में देखा। जबकि पहली बार डब्लूएसडीएल को बहुत अधिक रिकर्सन के कारण पार्स करने में समस्याएं थीं, सूड ने ठीक काम किया (लेकिन धीमा) और मुझे वास्तव में मॉड्यूल पसंद है।

हालांकि, एसयूडीएस के साथ उच्च स्मृति खपत, डब्लूएसडीएल पार्सिंग गति और कुछ डब्लूएसडीएल विशेषताओं (उदाहरण के लिए पसंद विशेषता) के लिए अनुपलब्ध समर्थन जैसी कई समस्याएं प्रतीत होती हैं।
हालांकि बहुत से लोग बग रिपोर्ट और पैच सक्रिय रूप से कर रहे हैं, 2010-09-15 पर 0.4 से 0.45 के बाद एसयूडीएस के no release थे। इसके अलावा, विकी और रोडमैप थोड़ा उपेक्षित दिखते हैं।

मेरे लिए ऐसा लगता है कि एसयूडीएस अब बनाए रखा नहीं गया है।

तो यहाँ मेरे सवालों का:

  1. यह साबुन ग्राहक के रूप में झाग पर एक बड़ी परियोजना के आधार के लिए कोई मतलब है?
  2. क्या कोई सूड कांटा है जो पहले से टिकटिंग सिस्टम में उपलब्ध कुछ पैच लागू करता है?
  3. क्या विकल्प उपलब्ध हैं, कि एक कम स्मृति पदचिह्न और आसानी से इस्तेमाल कर रहे हैं और जटिल बड़े डबल्यूएसडीएल फ़ाइलों

संभाल कर सकते हैं [अपडेट नवंबर 2013]

से अधिक दो साल बीत चुके हैं और यह पता चला है कि मूल सूड परियोजना वास्तव में मर चुका है। 2010 के बाद से कोई और रिलीज नहीं हुआ है। इस तथ्य के कारण बहुत से लोगों ने सूड फेंकना शुरू कर दिया और डेबियन जैसे कुछ मुद्दों को ठीक करने के लिए मूल सूड पैकेज के पैच किए गए संस्करणों को तैनात कर रहे हैं।

मैं जुर्को के सक्रिय रूप से बनाए रखा फोर्क की सिफारिश कर सकता हूं जिसे मैंने सफलतापूर्वक उपयोग किया था। यह अजगर 3 का समर्थन करता है और कई सूड की ज्ञात समस्याओं को संबोधित करता है। रिलीज नोट्स और बग ट्रैकर Bitbucket पर उपलब्ध हैं, यह पैकेज PyPI पर भी उपलब्ध है, इसलिए इसे पीपी का उपयोग करके इंस्टॉल किया जा सकता है।

+5

विकी परिवर्तन करता है जहां ज्यादातर 0.4 संस्करण जो 2010 में जारी किए गए हैं (निर्माण संख्याएं और उस तरह की चीजें)। पिछले 365 दिनों में जहां एक ही योगदानकर्ता द्वारा लगभग 11 काम करता है, उनमें से अधिकतर मामूली अपडेट (1-2 लोक)। किसी भी कमेटी के परिणामस्वरूप – circus

+1

हम [सर्कस] (http://stackoverflow.com/users/593507/circus) की उपर्युक्त टिप्पणी की पुष्टि कर सकते हैं: * [मूल सूड] से कोई नई रिलीज नहीं है (https: // pypi.python.org/pypi/suds) 2010 से *। हालांकि [niekas] (http://stackoverflow.com/users/2609806/niekas) ने देखा कि एक सूड कांटा बनाए रखा जाता है: [सूड-जुर्को] (https://bitbucket.org/jurko/suds/) ;-) – olibre

उत्तर

44

जबकि वहाँ एक प्रमाणित मानक नहीं है करने के लिए नहीं लगता है, तो आपको SOAP का उपयोग करना होगा, सुड्स आपकी सबसे अच्छी पसंद है। बड़े डब्ल्यूएसडीएल पर सूड धीमा हो सकता है, और यही वह काम है जिस पर वे काम कर रहे हैं।

  1. अपने डबल्यूएसडीएल डाउनलोड कर रहा है कैशिंग
  2. का उपयोग
  3. स्थानीय होस्ट करने के लिए:

    इस बीच, अगर आप अपने डबल्यूएसडीएल अक्सर बदलने के लिए की उम्मीद नहीं है, आपके पास दो विकल्प है कि आप गति का एक बहुत कुछ खरीद सकते हैं

समस्या की बड़ी WSDLs भाग के साथ अपने डबल्यूएसडीएल

डाउनलोड कर रहा है यह है कि पहले आप चाहिए डो हर बार WSDL को लोड करें, जो ओवरहेड जोड़ सकता है।सुड्स को यह सुनिश्चित करने के लिए स्टार्टअप पर पूरे डब्लूएसडीएल को डाउनलोड और पार्स करने का समय लगेगा कि यह नहीं बदला है।

यदि आप इसे स्थानीय सिस्टम में डाउनलोड कर सकते हैं और फिर URL में file:// योजना का उपयोग कर Client कन्स्ट्रक्टर को पास कर सकते हैं। चूंकि सूड HTTP परिवहन के लिए urllib2 का उपयोग करता है, यह पूरी तरह से कानूनी है।

अब, क्योंकि आप अपने डब्लूएसडीएल यूआरएल में होस्टनाम नहीं दे रहे हैं, तो आपको एसओएपी एप्लिकेशन के वास्तविक यूआरएल को निर्दिष्ट करने के लिए location तर्क भी पारित करना होगा।

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) 

आप रुचि रखते हैं, मैं अपने काम में इस दृष्टिकोण का इस्तेमाल किया और open sourced the code किया है:

यहाँ एक उदाहरण है।

कैशिंग अपने डबल्यूएसडीएल

अन्य विकल्प का उपयोग करने बीर 'excellent caching feature है। आपको स्पष्ट रूप से कैश ऑब्जेक्ट बनाना होगा और उसके बाद cache तर्क का उपयोग करके कन्स्ट्रक्टर को पास करना होगा। अन्यथा यह 1 दिन की अवधि के साथ ObjectCache पर डिफ़ॉल्ट हो जाता है।

आप इन दोनों दृष्टिकोणों का उपयोग करने पर भी विचार कर सकते हैं।

+0

ठीक है, मैं तब सूड के साथ रहूंगा और आपके द्वारा उल्लिखित विधियों का उपयोग करूंगा। मेमोरी पदचिह्न को कम करने के लिए, मैं शायद स्टड के एक पैच संस्करण के साथ समाप्त हो जाऊंगा। – circus

+0

यदि आप इसे साझा करना चुनते हैं तो मैं अंतिम परिणाम देखने के लिए तत्पर हूं! :) – jathanism

6

एक दिलचस्प अप-टू-डेट के बाद यहां पाया जा सकता: What SOAP client libraries exist for Python, and where is the documentation for them? दुर्भाग्य से, सही सोप पुस्तकालय आप देख रहे हैं, मौजूद (अभी तक)

+0

I इस धागे के बारे में जानें, इस तरह मैंने पहली जगह सूड पर ठोकर खाई। फिर भी धन्यवाद। – circus

+0

इसके अलावा, मैं एक संपूर्ण पुस्तकालय की तलाश नहीं कर रहा हूं। मुझे बस यह तय करने की ज़रूरत है कि क्या आधार एक बड़ी परियोजना है जो मैं अगले अर्ध वर्ष के लिए सूड पर काम करूँगा। और अगर मुझे इसे काम करने के लिए पुस्तकालय को पैच करना है। – circus

5

यह 2013 है। यह किसी भी व्यक्ति के लिए एक अद्यतन है जिसने पाइथन और एसओएपी के साथ समस्या का सामना किया है।

मैं पायथन में SOAP का उपयोग करने का प्रयास कर रहा था।

RuntimeError: maximum recursion depth exceeded while calling a Python object 

कौन सा पता चला है एक मुद्दा झाग होने की पुनरावर्ती संदर्भ के साथ है: मैं झाग बाहर की कोशिश की, लेकिन दुर्भाग्य से पुस्तकालय 2010 के बाद से अद्यतन नहीं किया गया है मेरे कोड के पहले टेस्ट समय में, मैं इस त्रुटि प्राप्त एचटीटीपीएस कनेक्शन पर। See drfence's answer। मुझे उस मुद्दे को पाने के लिए मैन्युअल रूप से सूड पैच करना पड़ा।

मैं इसके बजाय php पर स्विच किया। पायथन के रूप में सीधा नहीं है, लेकिन मैं इसे काम करने में सक्षम था।

+13

[सूड-जुर्को] (https://bitbucket.org/jurko/suds/) एसयूडीएस कांटा बनाए रखा जाता है। – niekas

+0

@niekas धन्यवाद। मैं इसे देख लूँगा। – RobotNerd

+0

मुझे नेटसुइट डब्लूएसडीएल लोड करने के लिए रिकर्सन गहराई के साथ एक ही समस्या थी। आपको नवीनतम जुर्को एसयूडीएस डेवलपर बिल्ड की आवश्यकता है, और इसे इस मुद्दे को ठीक करना चाहिए। (बिटबकेट यूआरएल से पहले https जोड़ें - टिप्पणियों में इसे नहीं कर सकते) सूडो पाइप स्थापित bitbucket.org/jurko/suds/get/tip.tar.gz#egg=suds –

6

नया अच्छी तरह से बनाए रखा SOAP क्लाइंट है जिसे zeep कहा जाता है। यह पाइथन 2 और 3 दोनों का समर्थन करता है और अच्छी तरह से ज्ञात एलएक्सएमएल पर आधारित है और पुस्तकालयों का अनुरोध करता है।

+0

मुझे यकीन नहीं है कि मैं ' जीप 'का कारण सामने वाले पृष्ठ पर उनके उदाहरण त्रुटिपूर्ण हैं; पहली छापें। विशेष रूप से त्वरित उदाहरण (अन्य उदाहरणों में दोहराया गया) से, आयात 'जीप आयात क्लाइंट' से है। फिर लाइन 2 पर ('क्लाइंट = zeep.Client (') आपको 'नाम त्रुटि देगा: नाम' ज़िप 'परिभाषित नहीं किया गया है। – VertigoRay

+3

चूंकि यह खुला स्रोत है ... https://github.com/mvantellingen/python-zeep/खींचें/23 – VertigoRay

+2

हाहा मैं उस परिवर्तन के साथ पीआर भेजने वाला था। तुमने मुझे हराया :) – chhantyal

संबंधित मुद्दे