Каков наилучший подход для создания клиента iphone для приложения rails?

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

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

13.12.2008 22:34:26
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

13
18.03.2009 23:20:20
звучит интересно, я тоже это проверю.
frankodwyer 26.02.2009 16:45:37
Чем больше я на это смотрю, тем больше мне это нравится. Собираюсь попробовать это первым.
frankodwyer 11.03.2009 16:40:44

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

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

4
13.12.2008 23:28:39

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

2
14.12.2008 00:05:32

Мне повезло, используя списки ...

Вам нужно будет установить гем 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 поставляется с собственным кодом для обработки plists.

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

6
15.12.2008 10:35:30
Звучит интересно, так как я бы не стал вдаваться в XML на телефоне, если бы мне не пришлось ... есть ли способ указать, что вы хотите получить результат plist при выполнении запроса (как rails делает для xml?). Или вы просто предоставляете другую конечную точку / параметр API, чтобы указать, что вы хотите получить результаты в виде списка?
frankodwyer 15.12.2008 11:16:44
Вы могли бы поработать над магией с маршрутами, чтобы настроить URL для заданного действия и форсировать определенный формат, а затем использовать сделку responseds_to в контроллере. Или, как вы сказали, просто используйте выделенную конечную точку для plist (вот что я делаю)
diclophis 17.12.2008 13:42:25

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

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

1
25.12.2008 21:50:32

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

1
2.03.2009 07:07:11