Как SOAP и REST работают с ответом XML/JSON?

Это один очень распространенный вопрос, задаваемый снова и снова при переполнении стека, и я прочитал так много ответов об этом, но я все еще немного смущен.

Мне нужно вызвать веб-службы из iPhone sdk.

вот мои вопросы:

  1. Я не понимаю, какой ответ SOAP или REST return.Есть ли что-то конкретное, что если ответ XML, то мы должны использовать REST и если JSON мы должны использовать SOAP?

  2. какова роль из ASIHTTP с мылом и отдыхом?

  3. Если я получаю ответ XML как

<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-ответ?

У меня так много статей о REST и SOAP, но нет правильного кода, чтобы понять это. Буду благодарен за любую помощь по этим вопросам.

3 ответов


SOAP - "простой протокол доступа к объектам"

SOAP-это способ передачи сообщений или небольших объемов информации через Интернет. Сообщения SOAP форматируются в формате XML и обычно отправляются по протоколу HTTP (HyperText transfer protocol).

таким образом, SOAP имеет стандарт, как сообщение должно быть отправлено.

каждая веб-служба soap может быть определена с помощью WSDL (язык определения веб-службы), который является своего рода схемой для SOAP XML переданный.

существует множество инструментов для преобразования WSDL (определение вашего веб-сервиса) в собственный код.

одним из инструментов, доступных для ObjC, является Sudz-C (http://sudzc.com/) которые преобразуют WDSL любого веб-сервиса в код ObjC для доступа к веб-службе.


Rest-передача репрезентативного состояния

остальное-это простой способ отправки и получения данных между клиентом и сервером и у него нет определенных стандартов, вы можете отправлять и получать данные как JSON,XML или даже текст. Его легкий вес по сравнению с мылом.

для обработки Rest в iOS доступно много инструментов, я бы рекомендовал RestKit http://restkit.org/, для обработки XML и JSON обоих.

Я бы предложил вам пойти с отдыхом для мобильной разработки, так как его легкий вес SOAP vs REST

(простой пример, люди поправляют меня, если я неправильно)


Итак, у вас есть несколько разных вопросов здесь:

  1. отдых-это способ ссылке веб-сервиса. SOAP является альтернативным способом доступа к веб-службе. REST использует строку запроса или формат URL, тогда как SOAP использует XML. JSON и XML-это два разных способа отправки данных. SOAP и XML обычно связаны друг с другом. Для мобильных приложений REST/JSON обычно является способом. Легче реализовать и поддерживать, гораздо больше, телеграфный, так далее.

  2. ASIHTTP, как отмечает Билл, является оберткой. Есть и другие варианты, которые делают подобные вещи в зависимости от того, что вам нужно. Если вы используете REST / JSON, то NSURLConnection + SBJSON может сделать трюк, мне нравится лично.

  3. Если ваш SOAP-сервис имеет доступный WSDL, вы можете использовать wsdl2objc для автоматического создания кода для синтаксического анализа и извлечения. Если это служба JSON или нет WSDL, я бы рекомендовал использовать SBJSON и просто разбор следующим образом:

    for (id jsonElement в repsonse) { личность.propertyA = [jsonElement valueForKey:@"Кея"]; личность.свойство b = [jsonElement valueForKey:@"вх"]; }

надеюсь, что это поможет!


1) ответы SOAP должны быть XML, и для возврата других форматов вам нужно либо встроить их в ответ XML (неэффективно), либо использовать вложения SOAP (сложно). Ответы SOAP содержатся в теге конверта soap, и обычно существует связанный wsdl. Если XML, который вы показываете, - это все, что вы получаете, то это может быть не SOAP-сервис. Я вижу ссылки в XML, так что это хороший знак, что они имели в виду отдых.

2) я не слышал об ASIHTTP. Быстрый google, и это выглядит так его сторонняя библиотека, которая обертывает http-интерфейсы в iOS. Похоже, вы использовали бы это, чтобы помочь вам сделать http-запросы, хотя я бы предположил, что это может быть не нужно; вы должны оценить использование HTTP-библиотек напрямую.

3) вам нужно как-то разобрать его. Вы можете сделать это вручную, но это вообще очень плохая идея. XML может приходить во многих формах и по-прежнему иметь то же значение, и если вы не поддерживаете все формы, ваше приложение может сломаться в будущем если поставщик веб-услуг начал форматировать свой XML по-разному, даже если его семантика была одинаковой. Вы бы использовали XML api для чтения XML. Api DOM прочитает его в форме дерева для вас, и Вы можете использовать XPath для извлечения информации из дерева.