Jak działa SOAP i REST z odpowiedzią XML / JSON?

Jest to jedno bardzo częste pytanie zadawane wielokrotnie na stack overflow i czytałem tak wiele odpowiedzi na ten temat, ale nadal jestem trochę zdezorientowany.

[1]}muszę zadzwonić do webservices z iPhone sdk.

Oto moje pytania:

  1. Nie wiem jaka odpowiedź czy reszta return.Is jest coś konkretnego, że jeśli odpowiedzią jest XML to powinniśmy użyć REST a jeśli JSON powinniśmy użyć SOAP?

  2. Jaka jest rola ASIHTTP z mydłem i Odpoczywać?

  3. Jeśli otrzymuję odpowiedź XML jako

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

Czy muszę to ręcznie analizować? lub jak obsługiwać odpowiedź XML?

Mam tyle artykułów o odpoczynku i mydle, ale nie ma odpowiedniego kodu, aby to zrozumieć. Byłbym wdzięczny za wszelką pomoc w odniesieniu do tych pytań.

Author: JosephH, 2011-12-22

3 answers

SOAP - "Simple Object Access Protocol"

SOAP jest metodą przesyłania wiadomości lub niewielkich ilości informacji przez Internet. Wiadomości SOAP są formatowane w XML i są zazwyczaj wysyłane przy użyciu HTTP (Hypertext transfer protocol).

Więc SOAP ma standard, jak wiadomość ma być wysłana.

Każda usługa internetowa soap może być zdefiniowana za pomocą WSDL(Web Service Definition Language), który jest swego rodzaju schematem dla przesyłanego SOAP XML.

Są wiele dostępnych narzędzi do konwersji WSDL (definicja webservice) do kodu natywnego.

Jednym z narzędzi dostępnych dla ObjC jest Sudz-C (http://sudzc.com/) które konwertują WDSL dowolnej usługi internetowej na kod ObjC, aby uzyskać dostęp do usługi internetowej.


Rest-Representational state transfer

Rest jest prostym sposobem wysyłania i odbierania danych między Klientem a serwerem i nie ma zdefiniowanych zbyt wielu standardów , można wysyłać i odbierać dane jako JSON, XML lub nawet tekst. Jego lekka waga w porównaniu do mydła.

Do obsługi Rest w iOS dostępnych jest wiele narzędzi, polecam RestKit http://restkit.org/, do obsługi zarówno XML jak i JSON.

Sugerowałbym, aby przejść z odpoczynku dla rozwoju mobilnego, ponieważ jego niewielka waga Mydło a odpoczynek

(prosty przykład, ludzie poprawiają mnie, jeśli się mylę)

 73
Author: Nakkeeran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-13 03:51:41

Ok, więc masz tu kilka różnych pytań:

  1. REST jest sposobem na dostęp do serwisu internetowego. SOAP jest alternatywnym sposobem dostępu do serwisu internetowego. REST używa ciągu zapytania lub formatu URL, podczas gdy SOAP używa XML. JSON i XML to dwa różne sposoby wysyłania danych zwrotnych. SOAP i XML są zwykle powiązane ze sobą. W przypadku aplikacji mobilnych REST / JSON jest zwykle dobrym rozwiązaniem. Łatwiejsze do wdrożenia i utrzymania, o wiele bardziej telegraficzne, itd.

  2. ASIHTTP, jak zauważa Bill, jest opakowaniem. Istnieją inne opcje, które robią podobne rzeczy w zależności od tego, czego potrzebujesz. Jeśli używasz REST / JSON to NSURLConnection + SBJSON może się uda, osobiście to lubię.

  3. Jeśli Twoja usługa SOAP ma dostępną WSDL, możesz użyć wsdl2objc, aby automatycznie zbudować kod do parsowania i pobierania. Jeśli jest to usługa JSON lub brak WSDL jest dostępny, polecam użycie SBJSON i po prostu parsowanie w następujący sposób sposób:

    For (id jsonElement in repsonse) { siebie.propertyA = [jsonelement valueForKey:@ " keyA"]; siebie.propertyB = [jsonelement valueForKey:@ " keyB"]; }

Mam nadzieję, że to pomoże!
 5
Author: tacos_tacos_tacos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 06:14:30

1) odpowiedzi SOAP muszą być XML, a aby zwrócić inne formaty, musisz albo osadzić je w odpowiedzi XML (nieefektywne) lub użyć załączników SOAP (trudne). Odpowiedzi SOAP są zawarte w znaczniku koperty soap i zwykle jest związany z wsdl. Jeśli wyświetlany przez Ciebie XML jest wszystkim, co dostajesz, może to nie być usługa SOAP. Widzę linki w XML, więc jest to dobry znak, że mieli odpocząć w umyśle.

2) nie słyszałem o ASIHTTP. Szybkie google, i wygląda na to, że jego biblioteka innej firmy, która zawija interfejsy http w systemie iOS. Wygląda na to, że użyłbyś tego, aby pomóc ci w wysyłaniu żądań http, chociaż sugerowałbym, że może to nie być konieczne; powinieneś ocenić bezpośrednio przy użyciu bibliotek http.

3) Musisz to jakoś przeanalizować. Można to zrobić ręcznie, ale ogólnie jest to naprawdę zły pomysł. XML może przybrać wiele form i nadal mieć to samo znaczenie, a jeśli nie obsługujesz wszystkich form, Twoja aplikacja może pęknąć w przyszłości, jeśli sieć usługodawca zaczął formatować swój XML inaczej, nawet jeśli jego semantyka była taka sama. Można użyć XML api do odczytu XML. API DOM odczytuje je do formularza drzewa dla Ciebie i możesz użyć XPath do wyodrębnienia informacji z drzewa.

 1
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 05:51:45