2011-12-22 6 views
8

यह एक बहुत ही आम सवाल है जो बार-बार स्टैक ओवरफ़्लो पर पूछा जाता है और मैंने इसके बारे में बहुत सारे जवाब पढ़े लेकिन मैं अभी भी थोड़ा उलझन में हूं।एक्सएमएल/जेएसओएन प्रतिक्रिया के साथ एसओएपी और आरईएसटी कैसे काम करते हैं?

मुझे आईफोन एसडीके से वेबसाइसेस को कॉल करने की आवश्यकता है।

यहाँ मेरी प्रश्न हैं:

  1. मैं स्पष्ट नहीं कर रहा हूँ क्या प्रतिक्रिया सोप या बाकी वहाँ return.Is कुछ भी विशिष्ट है कि अगर प्रतिक्रिया एक्सएमएल है तो हम बाकी है और यदि JSON हम का उपयोग करना चाहिए सोप इस्तेमाल करना चाहिए?

  2. एसओएपी और आरईएसटी के साथ एएसआईएचटीटीपी की भूमिका क्या है?

<oproduct> 
    <iid>113133791</iid> 
    <icategoryid>270</icategoryid> 
    <imerchantid>1547</imerchantid> 
    <iadult>0</iadult> 
    <sname>The Ashes/1st Test - England v Australia - Day 1</sname> 
    <sawdeeplink>http://www.acbcd.com/pclick.php?p=113133791&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink> 
    <sawthumburl>http://images.abcdd.com/thumb/1547/113133791.jpg</sawthumburl> 
    <fprice>69.99</fprice> 
    </oproduct> 

रूप

  • अगर मैं हो रही है XML प्रतिक्रिया मैं हाथ से पार्स करने के लिए की जरूरत है? या मैं एक्सएमएल प्रतिक्रिया कैसे संभाल सकता हूं?

    मुझे आरईएसटी और एसओएपी के बारे में बहुत सारे लेख मिल गए लेकिन इसे समझने के लिए कोई उचित कोड नहीं है। मैं इन सवालों के संबंध में किसी भी मदद के लिए आभारी रहूंगा।

  • उत्तर

    71

    सोप - "सिम्पल ऑब्जेक्ट एक्सेस प्रोटोकॉल"

    सोप, संदेश, या जानकारी की थोड़ी मात्रा के हस्तांतरण इंटरनेट पर की एक विधि है। एसओएपी संदेशों को एक्सएमएल में स्वरूपित किया जाता है और आमतौर पर HTTP (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल) का उपयोग करके भेजा जाता है।

    तो एसओएपी का मानक है कि एक संदेश कैसे भेजा जाना है।

    प्रत्येक साबुन वेब सेवा को डब्लूएसडीएल (वेब ​​सेवा परिभाषा भाषा) के साथ परिभाषित किया जा सकता है जो एसओएपी एक्सएमएल स्थानांतरित करने के लिए एक स्कीमा है।

    डब्ल्यूएसडीएल (आपकी webservice परिभाषा) को मूल कोड में बदलने के लिए कई टूल उपलब्ध हैं।

    ObjC के लिए उपकरण उपलब्ध में से एक Sudz-सी (http://sudzc.com/) जो वेब सेवा का उपयोग करने ObjC कोड में कोई भी वेब सेवा के WDSL परिवर्तन करते हैं।


    रेस्ट - रिप्रेसेंटेशनल स्टेट हस्तांतरण

    बाकी क्लाइंट और सर्वर के बीच डेटा भेजने और प्राप्त करने का एक आसान तरीका है और यह आपको किसी पर मानक परिभाषित नहीं है तुम भेज सकते हैं और के रूप में डेटा प्राप्त जेएसओएन, एक्सएमएल या यहां तक ​​कि एक पाठ। इसका प्रकाश एसओएपी की तुलना में भारित है।

    आईओएस में आराम को संभालने के लिए वहाँ कई उपकरण उपलब्ध हैं, मैं, RestKit http://restkit.org/ सिफारिश करेंगे XML और JSON से निपटने के लिए दोनों।

    मैं, मोबाइल विकास के लिए रेस्ट साथ जाने के लिए अपने हल्के वजन SOAP vs REST

    जब से तुम सुझाव है कि (सरल उदाहरण के लिए, लोगों ने मुझे सही करते हैं मैं गलत हूँ)

    +5

    यह कमाल है। –

    +0

    @ jshin47 धन्यवाद – Nakkeeran

    +10

    मजेदार छवि के लिए +1;) –

    1

    1) एसओएपी प्रतिक्रियाएं एक्सएमएल होनी चाहिए, और अन्य प्रारूपों को वापस करने के लिए जिन्हें आपको प्रतिक्रिया एक्सएमएल (अक्षम) में एम्बेड करने या एसओएपी संलग्नक (कठिन) का उपयोग करने की आवश्यकता है। एसओएपी प्रतिक्रियाएं साबुन लिफाफे टैग में निहित होती हैं, और आमतौर पर एक संबंधित wsdl होता है। यदि आप जो एक्सएमएल दिखाते हैं वह सब कुछ आपको मिल रहा है, तो यह एक एसओएपी सेवा नहीं हो सकती है। मैं एक्सएमएल में लिंक देखता हूं ताकि यह एक अच्छा संकेत हो कि उनके पास रीस्ट है।

    2) मैंने ASIHTTP के बारे में नहीं सुना है। एक त्वरित Google, और ऐसा लगता है कि यह एक तृतीय पक्ष लाइब्रेरी है जो आईओएस में http इंटरफेस को लपेटता है। ऐसा लगता है कि आप http अनुरोधों को बनाने में आपकी सहायता के लिए इसका उपयोग करेंगे, हालांकि मैं सुझाव दूंगा कि यह आवश्यक नहीं हो सकता है; आपको सीधे http पुस्तकालयों का उपयोग करके मूल्यांकन करना चाहिए।

    3) आपको इसे किसी भी तरह से पार्स करने की आवश्यकता है। आप इसे हाथ से कर सकते हैं, लेकिन यह आम तौर पर वास्तव में एक बुरा विचार है। एक्सएमएल कई रूपों में आ सकता है और अभी भी वही अर्थ है, और यदि आप सभी रूपों का समर्थन नहीं करते हैं तो आपका आवेदन भविष्य में तोड़ सकता है यदि वेब सेवा प्रदाता ने अपने एक्सएमएल को अलग-अलग प्रारूपित करना शुरू किया, भले ही इसके अर्थशास्त्र समान थे। एक्सएमएल पढ़ने के लिए आप एक एक्सएमएल एपीआई का उपयोग करेंगे। डोम एपीआई इसे आपके लिए एक पेड़ के रूप में पढ़ेगा, और आप पेड़ से जानकारी निकालने के लिए XPath का उपयोग कर सकते हैं।

    +0

    एक्सएमएल द्वारा नहीं पढ़ने के लिए अन्य विकल्प क्या है हाथ? क्या यह एनएसएक्सएमएल की बजाय TouchXML है?क्योंकि मेरे पास एनएसएक्सएमएल का उपयोग करने का अभ्यास है और इसे '(शून्य) पार्सर का उपयोग करके हाथ से पार्स करें: (NSXMLParser *) पार्सर किया गया थास्टार्ट एलिमेंट: (एनएसएसटींग *) तत्वनाम नामस्थान: (एनएसएसटींग *) नेमस्पेसुरि योग्यता नाम: (एनएसएसटींग *) qName विशेषताएं: (NSDictionary *) atributeDict { अगर ([elementName isEqualToString: @ "NoOfObjectsDetected"]) { noOfObjetcsArray = [NSMutableArray alloc] initwithcapacity: 0]; elementNameStr = elementName; } } 'विधि – Heena

    +0

    मैं एनएसएक्सएमएल से परिचित नहीं हूं, लेकिन ऐसा लगता है कि यह आपके लिए एक्सएमएल से पेड़ संरचनाएं बनाता है, इसलिए मैं इसे" हाथ से पार्सिंग "नहीं कहूंगा। यदि आप इससे परिचित हैं तो इसके लिए जाएं। – Bill

    +0

    जो मैं समझता हूं "हाथ से पार्सिंग" है, मैं पहले से ही पेड़ की संरचना को प्रश्न के रूप में जानता हूं, और मैं अपनी पिछली टिप्पणी – Heena

    5

    ठीक है, तो आप कुछ अलग सवाल यहाँ है:

    1. बाकी तक पहुँचने वेब सेवा का एक तरीका है। एसओएपी वेब सेवा तक पहुंचने का एक वैकल्पिक तरीका है। आरईएसटी क्वेरी स्ट्रिंग या यूआरएल प्रारूप का उपयोग करता है जबकि एसओएपी एक्सएमएल का उपयोग करता है। जेएसओएन और एक्सएमएल डेटा वापस भेजने के दो अलग-अलग तरीके हैं। एसओएपी और एक्सएमएल आमतौर पर एक दूसरे के साथ जुड़े होते हैं। मोबाइल ऐप्स के लिए, आरईएसटी/जेएसओएन आमतौर पर जाने का तरीका होता है। लागू करने और बनाए रखने के लिए आसान, अधिक टेलीग्राफिक, आदि

    2. बिल नोट्स के रूप में ASIHTTP, एक रैपर है। अन्य विकल्प भी हैं जो आपको आवश्यक चीज़ों के आधार पर समान चीजें करते हैं। यदि आप आरईएसटी/जेएसओएन का उपयोग कर रहे हैं तो NSURLConnection + SBJSON चाल चल सकता है, मुझे इसे व्यक्तिगत रूप से पसंद है।

    3. यदि आपकी एसओएपी सेवा में एक डब्ल्यूएसडीएल उपलब्ध है तो आप अपने पार्सिंग और लाने के लिए स्वचालित रूप से कोड बनाने के लिए wsdl2objc का उपयोग कर सकते हैं। @ "Keya":

      के लिए (repsonse में आईडी jsonElement) { self.propertyA = [jsonElement valueForKey

      : यदि यह एक JSON सेवा है या नहीं डबल्यूएसडीएल उपलब्ध है, मैं SBJSON का उपयोग कर और केवल निम्नलिखित तरीके से पार्स करने की सिफारिश करेंगे ]; self.propertyB = [jsonElement valueForKey: @ "keyB"]; }

    आशा है कि मदद करता है!

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