Как SOAP и REST работают с ответом XML/JSON?
Это один очень распространенный вопрос, задаваемый снова и снова при переполнении стека, и я прочитал так много ответов об этом, но я все еще немного смущен.
Мне нужно вызвать веб-службы из iPhone sdk.
вот мои вопросы:
Я не понимаю, какой ответ SOAP или REST return.Есть ли что-то конкретное, что если ответ XML, то мы должны использовать REST и если JSON мы должны использовать SOAP?
какова роль из ASIHTTP с мылом и отдыхом?
Если я получаю ответ 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&a=111402&m=1547&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 является альтернативным способом доступа к веб-службе. REST использует строку запроса или формат URL, тогда как SOAP использует XML. JSON и XML-это два разных способа отправки данных. SOAP и XML обычно связаны друг с другом. Для мобильных приложений REST/JSON обычно является способом. Легче реализовать и поддерживать, гораздо больше, телеграфный, так далее.
ASIHTTP, как отмечает Билл, является оберткой. Есть и другие варианты, которые делают подобные вещи в зависимости от того, что вам нужно. Если вы используете REST / JSON, то
NSURLConnection
+SBJSON
может сделать трюк, мне нравится лично.-
Если ваш 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 для извлечения информации из дерева.