2011-12-22 13 views
8

Questa è una domanda molto frequente posta più e più volte sullo stack overflow e ho letto tante risposte a riguardo ma sono ancora un po 'confuso.In che modo SOAP e REST funzionano con la risposta XML/JSON?

Ho bisogno di chiamare i servizi Web da sdk iPhone.

Ecco le mie domande:

  1. non mi è chiaro che cosa la risposta SOAP o REST return.Is c'è qualcosa di specifico che se la risposta è XML allora dovremmo usare REST e JSON, se dobbiamo usare il sapone?

  2. Qual è il ruolo di ASIHTTP con SOAP e REST?

  3. Se sto ottenendo risposta XML come

<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> 

Ho bisogno di analizzare a mano? o come gestisco la risposta XML?

Ho ricevuto così tanti articoli su REST e SOAP ma nessun codice corretto per capirlo. Sarei grato per qualsiasi aiuto in merito a queste domande.

risposta

71

SOAP - "Simple Object Access Protocol"

SOAP è un metodo di trasferimento di messaggi o piccole quantità di informazioni, su Internet. I messaggi SOAP sono formattati in XML e generalmente inviati tramite HTTP (protocollo di trasferimento ipertestuale).

Quindi SOAP ha uno standard come deve essere inviato un messaggio.

Ogni servizio Web sapone può essere definito con un WSDL (Web Service Definition Language) che è una specie di schema per l'XML SOAP trasferito.

Esistono molti strumenti per convertire WSDL (la definizione del servizio Web) in codice nativo.

Uno degli strumenti disponibili per objC è Sudz-C (http://sudzc.com/) che convertono la WDSL di qualsiasi webservice in codice objC per accedere al servizio Web.


Rest - Representational State Transfer

resto è un modo semplice per l'invio e la ricezione di dati tra client e server e non hanno alcuna norma molto definiti, è possibile inviare e ricevere dati come JSON, XML o anche un testo. Il suo peso leggero rispetto al sapone.

Per gestire Resto in iOS ci sono molti strumenti a disposizione, consiglio RestKit http://restkit.org/, per la gestione di XML e JSON entrambi.

io vi suggerisco di andare con Riposo per lo sviluppo mobile, dal momento che la sua leggerezza SOAP vs REST

(Esempio semplice, gente mi corregga se sbaglio)

+5

Questo è fantastico. –

+0

@ jshin47 grazie – Nakkeeran

+10

+1 per immagini divertenti;) –

1

1) Le risposte SOAP devono essere XML e restituire altri formati necessari per incorporarli nella risposta XML (inefficiente) o utilizzare gli allegati SOAP (difficile). Le risposte SOAP sono contenute in un tag di busta di sapone, e di solito c'è un wsdl associato. Se l'XML che mostri è tutto ciò che stai ricevendo, allora potrebbe non essere un servizio SOAP. Vedo i collegamenti nell'XML in modo che sia un buon segno che hanno avuto REST in mente.

2) Non ho sentito parlare di ASIHTTP. Un rapido google e sembra una libreria di terze parti che avvolge le interfacce http in iOS. Sembra che tu lo userai per aiutarti a fare le richieste http, anche se suggerirei che potrebbe non essere necessario; dovresti valutare usando direttamente le librerie http.

3) È necessario analizzarlo in qualche modo. Puoi farlo a mano, ma questa è generalmente una pessima idea. L'XML può assumere molte forme e avere lo stesso significato, e se non supporti tutti i moduli la tua applicazione potrebbe rompersi in futuro se il fornitore di servizi web iniziasse a formattare il loro XML in modo diverso, anche se la sua semantica fosse la stessa. Dovresti usare un api XML per leggere l'XML. Il DOM api lo leggerà in una forma ad albero per te, e puoi usare XPath per estrarre le informazioni dall'albero.

+0

Qual è l'altra opzione per leggere XML non per mano? è TouchXML piuttosto che NSXML?perché ho pratica di usare NSXML e analizzarlo a mano usando parser '(void): (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) atributeDict { if ([elementName isEqualToString: @ "NoOfObjectsDetected"]) { noOfObjetcsArray = [alloc NSMutableArray] initwithcapacity: 0]; elementNameStr = elementName; }} 'metodo – Heena

+0

io non sono a conoscenza NSXML, ma sembra che crea strutture ad albero per voi fuori del xml, quindi non lo chiamerei " l'analisi a mano." Se ti è familiare, prova a farlo. – Bill

+0

Quello che capisco "l'analisi a mano" è, conosco già la struttura ad albero come in questione, e sto analizzando ogni tag uno ad uno usando i metodi sopra nel mio commento precedente – Heena

5

Ok, in modo da avere un paio di domande diverse qui:

  1. REST è un modo di accesso il servizio web. SOAP è un modo alternativo per accedere al servizio web. REST utilizza la stringa di query o il formato URL mentre SOAP utilizza XML. JSON e XML sono due modi diversi per inviare i dati. SOAP e XML sono generalmente associati tra loro. Per le app mobili, REST/JSON è solitamente la strada da percorrere. Più facile da implementare e mantenere, di gran lunga più telegrafico, ecc

  2. ASIHTTP, come osserva Bill, è un wrapper. Ci sono altre scelte che fanno cose simili a seconda di ciò che ti serve. Se stai usando REST/JSON, allora NSURLConnection + SBJSON potrebbe fare il trucco, mi piace personalmente.

  3. Se il servizio SOAP dispone di un WSDL disponibile, è possibile utilizzare wsdl2objc per creare automaticamente il codice per l'analisi e il recupero. Se si tratta di un servizio di JSON o nessun WSDL è disponibile, mi consiglia di utilizzare SBJSON e semplicemente l'analisi nel modo seguente:

    per (id jsonElement in repsonse) { self.propertyA = [jsonElement valueForKey: @ "Keya" ]; self.propertyB = [jsonElement valueForKey: @ "keyB"]; }

Spero che questo aiuti!

Problemi correlati