JSON или SOAP (XML)?
Я разрабатываю новое приложение для компании.
Приложение должно обмениваться данными с iPhone и с iPhone.
На стороне сервера компании используется .NET framework.
Например: класс "Клиент" (имя, адрес и т.д.) для определенного номера CustomerNumber должен быть сначала загружен с сервера на iphone, сохранен локально, а затем загружен обратно, чтобы применить изменения (и сделать их доступными для других людей), Concurrency не должно быть проблемой (по крайней мере в это время...)
В любом случае мне приходится разрабатывать как серверную (webservice), так и iPhone-приложение.
Я свободен для определения наилучшего способа сделать это (это приложение "число ОДИН", поэтому оно станет "стандартом" для будущего).
Итак, что вы мне предлагаете?
Использовать веб-службы SOAP (разбор XML и т.д.) или пользовательский JSON? (кажется, легче...)
Мне понятно, как "загружать" данные с помощью SOAP (очень долго, чтобы закодировать конверт soap xml... я бы избегал), но как я могу сделать то же самое с помощью JSON?
Приложению необходимо использовать значения даты (например: last_visit_date и т.д.), что о дате в Json?
Ответы
Ответ 1
JSON имеет несколько преимуществ перед XML. Он намного меньше и меньше раздувается, поэтому вы будете пропускать гораздо меньше данных по сети, что в случае мобильного устройства значительно изменится.
Его также проще использовать в javascript-коде, поскольку вы можете просто передать пакет данных непосредственно в массив javascript без какого-либо анализа, извлечения и конвертирования, поэтому он также значительно не требует интенсивного процессора.
Чтобы создать код с ним, вместо библиотеки XML вам понадобится библиотека JSON. Даты обрабатываются так же, как с XML - кодируют их по стандарту, а затем позволяют библиотеке распознавать их. (например, здесь библиотека с образцом с датами в нем)
Здесь праймер.
Ответ 2
А, большой вопрос: JSON или XML?
В общем, я бы предпочел использовать XML только тогда, когда мне нужно передать много текста, поскольку XML превосходит при упаковке и маркировке текста.
При прохождении небольших объектов данных, где единственные строки являются небольшими (идентификаторы, даты и т.д.), я хотел бы использовать JSON, поскольку он меньше, проще разбирать и читать более.
Также обратите внимание, что даже если вы выберете XML, это никоим образом не означает, что вам нужно использовать SOAP. SOAP - очень тяжелый протокол, предназначенный для взаимодействия между партнерами. Поскольку вы контролируете как клиент, так и сервер здесь, это не обязательно имеет смысл.
Ответ 3
Подумайте, как вы будете потреблять результаты на iPhone. Какой mechansim вы использовали бы для чтения ответа веб-службы? NSXMLParser?
Как вы потребляете данные, самое большое влияние на то, как вы его обслуживаете.
Являются ли JSON и SOAP только вашими опциями? Как насчет сервисов RESTful?
Взгляните на некоторых крупных игроков в Интернете, которые имеют общедоступные API-интерфейсы, доступные для клиентов iPhone:
Twitter API
API FriendFeed
Кроме того, просмотрите следующие связанные статьи:
Ответ 4
JSON имеет следующие преимущества:
- он может кодировать логические и числовые значения... в XML все есть строка
- у него гораздо более четкая семантика... в json у вас есть
{"key":"someValue"}
, в XML вы можете иметь <data><key>someValue</key></data>
или <data key="someValue" />
... любой XML node должен иметь имя... это не всегда имеют смысл... и дети могут либо представлять свойства объекта, либо дети, которые при многократном фактическом представлении массива... чтобы действительно понять структуру объекта XML-сообщения, вам нужна его соответствующая схема... в JSON, вам нужен только JSON...
- меньше и, следовательно, использует меньшую пропускную способность и память во время разбора/генерации...
кроме этого, я вижу NO разницу между XML и JSON... я имею в виду, что это так взаимозаменяемо... вы можете использовать JSON для захвата семантики SOAP, если вы хотите...
это просто, что SOAP настолько раздута... если вы хотите использовать SOAP, используйте для этого библиотеку и генераторы... это не интересно и не интересно создавать все это вручную...
с использованием XML RPC или JSON RPC должен работать быстрее... он более легкий, и вы используете JSON или XML по своему усмотрению... но при создании клиентских & серверных приложений очень важная вещь на моих глазах, чтобы абстрагировать транспортный уровень с обеих сторон... вся ваша бизнес-логика и т.д. ни в коем случае не должна зависеть от более чем крошечного интерфейса, когда дело доходит до общения, а затем вы можете подключать протоколы к вашему приложению, по мере необходимости...
Ответ 5
Вы также можете использовать Hessian, используя HessianKit на стороне iPhone, и HessianС# на стороне сервера.
Большие бонусы:
1. Гессиан в бинарном протоколе сериализации, поэтому меньшая полезность данных, хорошая для 3G и GSM.
2. Вам не нужно беспокоиться о формате в любом конце, транспорт автоматизирован с прокси.
Итак, на стороне сервера вы просто определяете интерфейс С#, например:
public interface IFruitService {
int FruitCount();
string GetFruit(int index);
}
Затем вы просто подклассифицируете CHessianHandler и реализуете IFruitService, и ваш веб-сервис будет выполнен.
На iPhone просто напишите соответствующий протокол Objective-C:
@protocol IFruitService
-(int)FruitCount;
-(NSString*)GetFruit:(int)index;
@end
Это может быть доступ через прокси с помощью одной строки кода:
id<IFruitService> fruitService = [CWHessianConnection proxyWithURL:serviceURL
protocol:@protocol(IFruitService)];
Ссылки:
HessianKit: hessiankit
Ответ 6
Есть больше вариантов, чем просто SOAP против JSON. Вы можете сделать протокол на основе REST (Передача репрезентативного состояния) с использованием XML. Я думаю, что это проще использовать, чем SOAP, и вы получаете гораздо более приятный XSD (который вы разрабатываете). Довольно легко почти любому клиенту получить доступ к таким сервисам.
С другой стороны, синтаксические анализаторы JSON доступны практически для любого языка и позволяют легко вызвать JavaScript из JavaScript, если вы будете использовать их через AJAX.
Однако SOAP может быть довольно мощным с тоннами стандартизованных расширений, которые поддерживают функции предприятия.
Ответ 7
Я бы, конечно, пошел с JSON, как уже отмечали другие, - быстрее, а размер данных меньше. Вы также можете использовать структуру моделирования данных, такую как JSONModel, для проверки структуры JSON и автоконвертировать объекты JSON в объекты Obj-C.
JSONModel также включает в себя классы для работы в сети и работы с API-интерфейсами - также включает методы json rpc.
Посмотрите на эти ссылки:
Краткий пример использования JSONModel:
http://www.touch-code-magazine.com/how-to-make-a-youtube-app-using-mgbox-and-jsonmodel/
Надеюсь, что это полезно