Я собираюсь создать внутреннее приложение для iPhone и iPad, которое будет отслеживать звонки продаж, связанные с ними кавычки, фотографии и рисунки для этих котировок. Я все еще на стадии разработки концепции, и я пытаюсь прочитать различные способы связи между моим приложением и веб-сервисом. Очевидно, так как это будет использоваться в основном по 3G или … Edge Я хочу эффективный протокол, поэтому моя реакция на кишок должна держаться подальше от XML-подобных вещей, таких как XML-RPC или SOAP. Я хотел бы использовать PHP и MySQL на сервере и планировать использование Core Data в iOS.
Поэтому у меня есть пара конкретных вопросов:
Учитывая то, как вы задали несколько вопросов, вы, вероятно, понимаете, что конечное решение, которое вы используете, будет балансирующим действием между конкурирующими целями.
1: Вам нужно определить «производительность» лучше. Я предполагаю, что вы имеете в виду время передачи по сети, что означает, что время ожидания сервера низкое и количество байтов, переданных на низком уровне. Конечным является, вероятно, собственный протокол бинарных проводов, который также анализируется на сжатие и сжатие, применяемые там, где это необходимо (например, повторяющиеся строки или последовательности). Недостатком такого протокола является то, что, скорее всего, будет сложнее кодировать как сервер, так и клиент, поскольку вы не сможете использовать поддержку SDK для стандартизованных кодировок, и если тщательно продуманные двоичные протоколы не будут хрупкими для поддержки будущих изменений и расширения вашего приложения.
Также вы должны подумать о том, как вы определяете транзакции своего протокола, даже с эффективной кодировкой, если ваш протокол требует много поездок в оба конца по сравнению с одной поездкой в оба конца, вы все равно будете медленными.
Наконец, в зависимости от размера отправляемых данных накладные расходы на кодирование могут быть несущественными по сравнению с размером данных.
Я рекомендую придерживаться стандартизованного формата кодирования, который может быть проанализирован с поддержкой библиотеки, который сужает поле до двух основных грамматик: XML или JSON.
2: XML и JSON хорошо поддерживаются в серверных средах. При использовании служб XML я рекомендую шаблон стиля REST, поскольку их обычно легко создавать, и вам не нужно соответствовать вашему приложению в чужом стиле.
Я бы держался подальше от веб-сервисов на основе SOAP, хотя их создание может быть хорошо поддержано (особенно на платформах Windows), потому что сложность полного анализа SOAP на мобильном клиенте высока и не поддерживается. Я не нахожу автоматически сгенерированную сериализацию объектов компиляторами WSDL, чтобы выиграть для экономии времени при кодировании, обычно довольно легко сериализовать XML в стиле REST или часто даже проще для JSON.
3: iOS поддерживает встроенный XML-парсер SAX в стиле SAX, и существует множество доступных библиотек классов, которые поддерживают реализации DOM в памяти с различными функциями и уровнями скорости. Выберите лучшее для ваших нужд. Я лично предпочитаю TBXML, который является быстрым, довольно легким и простым в программировании, но поскольку он не проверяет схемы и является деревом в памяти, в некоторых ситуациях он не подходит. Вот перерыв в производительности библиотеки XML iOS.
Для iOS доступно несколько JSON-библиотек, если вы используете Google. Или посмотрите в этом ответе .
SOAP поддерживается не очень хорошо, и есть ограниченный выбор библиотеки. Вы всегда можете вручную разобрать ответы SOAP, сгенерированные сервером, но они хрупки для изменений на стороне сервера, которые являются законными SOAP (например, префиксы разных пространств имен), которые могут сломать жесткий код XML-кода.
4: Трудно ответить, не зная больше о деталях вашего проекта, но я склоняюсь к JSON или простой кодировке на основе XML, потому что: как правило, легко программировать на клиентском и сервере, оба могут быть выполнены с разумной эффективностью на провод, и, вероятно, будут расширяемы для будущих итераций приложений.
JSON имеет преимущества быть немного проще в анализе, может быть менее многословным, а также может быть проще повторной задачей для других целей, например, создание веб-клиента Ajax поверх ваших услуг.
5: XML против JSON против других кодировок? Я думаю, что это личное предпочтение. XML может быть более самоописательным, чем JSON, но, скорее всего, будет больше работать для разбора. JSON может быть ниже накладных расходов в сырых байтах и легко анализируется. Опять же, служебные данные кодирования могут быть значительными или могут быть незначительными в зависимости от размера вашего контента. Также вы можете применить внешнее сжатие в любом случае.
UPDATE: iOS5 теперь включает встроенную поддержку JSON с новым классом NSJSONSerialization . Вы можете прочитать учебник по использованию JSON с iOS5 здесь:
http://www.raywenderlich.com/5492/working-with-json-in-ios-5