Каков наилучший подход для создания клиента iphone для приложения rails? - PullRequest
11 голосов
/ 14 декабря 2008

У меня довольно стандартное приложение rails, и я хотел бы получить доступ к основным операциям CRUD (создание, обновление, удаление), а также к добавленным запросам из приложения для iPhone. Rails предоставляет REST API для этих операций более или менее из коробки.

Каков наилучший подход к работе с частью REST / XML на iphone, и есть ли какие-нибудь хорошие библиотеки Objective-C, которые уже делают подобные вещи? Операции также должны быть связаны с конкретным пользователем (то есть аутентифицированы).

Ответы [ 6 ]

13 голосов
/ 26 января 2009

Это общая проблема для меня, настолько, что я работал над портом инфраструктуры Rails ActiveResource под названием ObjectiveResource .

До сих пор у нас было два релиза проекта. 1.0 уже используется несколькими приложениями в App Store и может обрабатывать обработку ресурсов по умолчанию to_xml и to_json, встроенную в Rails. 1.01 - это исправление ошибки и падение обновления.

В настоящее время мы работаем над определением набора функций для 1.1. У нас уже есть несколько идей , и мы обсуждаем больше в списке рассылки .

6 голосов
/ 15 декабря 2008

Мне повезло с использованием списков ...

Вам потребуется установить гем plist-3.0.0 (gem install plist 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 поставляется с native код для обработки списков.

Но, если у вас все есть готовый веб-сервис, который выводит в формате json / xml, вы можете сохранить его и просто проанализировать материал на iphone, используя уже упомянутый материал (TouchXML, json-framework)

4 голосов
/ 14 декабря 2008

Лучше всего написать простой класс-оболочку для NSURLConnection, который настраивает специфические вещи для вашего API. Это не особенно сложно, и позволяет вам адаптировать API вашего класса непосредственно к REST API, на который вы нацелены. Ваш класс может иметь метод init, например initWithMethod:delegate:params:, где делегат - это объект, который хочет получить результат асинхронно, а params - это NSDictionary всех параметров. Вы также можете использовать свойство класса для настройки аутентификации (или сделать так, чтобы класс обнаружил и записал это сам после входа в систему).

Что касается синтаксического анализа XML, я бы рекомендовал проверить TouchXML .

2 голосов
/ 14 декабря 2008

Если вам не нравится синтаксический анализ XML (и кто это делает?) И вы можете настроить бэкэнд для выдачи JSON вместо XML, я настоятельно рекомендую использовать такую ​​библиотеку, как json-framework . Гораздо проще просто читать данные в объекты, чем анализировать узлы XML.

1 голос
/ 02 марта 2009

Будьте осторожны, используя NSURLConnection на iPhone. Известно, что утечки памяти могут привести к быстрому падению приложения. Если вы делаете много HTTP-запросов, не ожидайте, что NSURLConnection будет работать для вас. Найдите что-нибудь еще, возможно какую-нибудь обертку для завитков.

1 голос
/ 26 декабря 2008

Я недавно собрал пример TouchJSON, который использует NSURLConnection. Это очень просто, но должно быть достаточно, чтобы начать работу с загрузкой asych.

http://github.com/twoism/touchjsonexample/tree/master

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...