Каков наилучший подход для создания клиента iphone для приложения rails?
У меня есть довольно стандартное приложение rails и вы хотели бы иметь доступ к основным операциям CRUD (Create, Update, Delete), а также к запросам, которые я добавил, из приложения iPhone. Rails предоставляет REST API для этих операций более или менее из коробки.
Каков наилучший подход к работе с частью REST/XML на iphone, и есть ли хорошие библиотеки objective-C, которые уже делают это? Операции также должны быть связаны с конкретным пользователем (то есть аутентифицированы).
Ответы
Ответ 1
Это обычная проблема для меня, настолько, что я работал над портом Rails ActiveResource framework под названием ObjectiveResource,
До сих пор у нас было два релиза проекта. 1.0 уже используется несколькими приложениями в App Store и может обрабатывать обработку ресурсов по умолчанию to_xml и to_json, встроенную в Rails. 1.01 является выпуском исправления ошибок и снижением обновления.
В настоящее время мы работаем над определением набора функций для 1.1. Мы уже имеем немало идей и обсуждаем больше о список рассылки.
Ответ 2
Мне повезло с использованием plists...
Вам понадобится установить жемчужину plist-3.0.0 (плагин для установки gem IIRC)
Затем в вашем контроллере вы настроите что-то вроде этого:
plist = {'a' => 'b', 'c' => 'd', 'e' => {'f' => 'g', 'h' => {'i' => 'j'}}}.to_plist
render(:text => plist)
Затем в вашем приложении iphone установите что-то вроде этого:
NSURL *url = [NSURL URLWithString:@"http://somewhere.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response;
NSError *error;
NSData *plistData;
plistData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSPropertyListFormat format;
NSString *errorStr;
id imagesToRate = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr];
if(!imagesToRate) {
NSLog(errorStr);
} else {
NSLog(@"%@", [imagesToRate objectForKey:@"e"]);
}
Вы в значительной степени получаете всю свободу использования json (например, вам не нужно сворачивать свою собственную XML-схему для форматирования ваших данных, а сериализация так же просто, как вызов to_plist) плюс, sdk поставляется с родным код для обработки пластин.
Но если у вас все готово веб-сервис, который выводится в json/xml, вы можете захотеть сохранить это и просто проанализировать материал на iphone, используя уже упомянутый материал (TouchXML, json-framework)
Ответ 3
Лучше всего написать простой класс-оболочку вокруг NSURLConnection, который настраивает конкретный материал для вашего API. Это не особенно сложно, и позволяет вам адаптировать ваш API класса непосредственно к API REST, на который вы нацеливаете. У вашего класса может быть метод init, например initWithMethod:delegate:params:
, где делегат является объектом, который хочет получить результат асинхронно, а params является NSDictionary всех параметров. Вы также можете использовать свойство класса для настройки аутентификации (или открыть класс и записать его после входа в систему).
Что касается анализа XML, я бы рекомендовал проверить TouchXML.
Ответ 4
Если вам не нравится синтаксический анализ XML (и кто это делает?) и может настроить бэкэнд для вышивания JSON вместо XML, я настоятельно рекомендую использовать библиотеку, такую как json-framework. Намного проще просто читать данные в объектах, чем анализировать через узлы XML.
Ответ 5
Недавно я собрал пример TouchJSON, который использует NSURLConnection. Это очень просто, но должно быть достаточно, чтобы вы начали с айш-загрузки.
http://github.com/twoism/touchjsonexample/tree/master
Ответ 6
Будьте осторожны, используя NSURLConnection на iPhone. Известно, что есть утечки памяти, которые могут привести к краху приложения очень быстро. Если вы выполняете множество HTTP-запросов, не ожидайте, что NSURLConnection будет работать на вас. Найдите что-то еще, возможно, какую-нибудь обертку для скручивания.