Как SOAP и REST работают с ответами XML / JSON? - PullRequest
8 голосов
/ 22 декабря 2011

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

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

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

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

  2. Какова роль ASIHTTP с SOAP и REST?

  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 ]

78 голосов
/ 22 декабря 2011

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

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

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

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

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

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


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

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

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

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

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

5 голосов
/ 22 декабря 2011

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

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

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

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

    для (id jsonElement в repsonse) { self.propertyA = [jsonElement valueForKey: @ "keyA"]; self.propertyB = [jsonElement valueForKey: @ "keyB"]; }

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

1 голос
/ 22 декабря 2011

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

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

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

...