2008-12-13 19 views
11

Tengo una aplicación de rieles bastante estándar y me gustaría poder acceder a las operaciones básicas de CRUD (Crear, Actualizar, Eliminar), así como a las consultas que he agregado, desde una aplicación de iPhone. Rails proporciona la API REST para estas operaciones más o menos de fábrica.¿Cuál es el mejor enfoque para construir un cliente de iPhone para una aplicación de rieles?

¿Cuál es el mejor enfoque para tratar con la parte REST/XML en el iphone, y hay alguna buena biblioteca objetivo-C que ya haga este tipo de cosas? Las operaciones también deberán estar asociadas a un usuario particular (es decir, autenticado).

Respuesta

13

Este es un problema común para mí, tanto es así que he estado trabajando en un puerto del marco rieles ActiveResource llamada ObjectiveResource.

Hemos tenido dos lanzamientos del proyecto hasta el momento. 1.0 ya está siendo utilizado por algunas aplicaciones en App Store y puede manejar el manejo de recursos to_xml y to_json predeterminado integrado en Rails. 1.01 es una versión de corrección de errores y una caída en la actualización.

Actualmente estamos trabajando en la definición del conjunto de características para 1.1. Nos have quite a few ideas ya, y son discussing more on the mailing list.

+0

suena interesante, también lo verificare. – frankodwyer

+0

Cuanto más miro esto, más me gusta. Voy a probar esto primero. – frankodwyer

4

Su mejor opción es escribir una clase de contenedor simple alrededor de NSURLConnection que configura las cosas específicas para su API. No es particularmente complicado, y te permite adaptar la API de tu clase directamente a la API REST a la que te diriges. Su clase puede tener un método init como initWithMethod:delegate:params: donde el delegado es el objeto que desea recibir el resultado de forma asíncrona, y el parámetro es un NSDictionary de todos los parámetros. También puede usar una propiedad en la clase para configurar la autenticación (o hacer que la clase descubra y registre eso luego de iniciar sesión).

En cuanto al análisis de XML, recomendaría visitar TouchXML.

2

Si no le gusta analizar XML (¿y quién lo hace?) Y puede configurar el backend para escupir JSON en lugar de XML, le recomiendo usar una biblioteca como json-framework. Es mucho más fácil simplemente leer datos en objetos que analizarlos a través de nodos XML.

6

que he tenido un poco de suerte usando plists ...

Usted tendrá que instalar la gema plist-3.0.0 (joya instalar plist IIRC)

Luego, en el controlador de configuración que algo como esto:

plist = {'a' => 'b', 'c' => 'd', 'e' => {'f' => 'g', 'h' => {'i' => 'j'}}}.to_plist 
render(:text => plist) 

Luego, en su iphone configuración de aplicación algo como esto:

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"]); 
} 

Obtienes toda la libertad de usar json (como en, no tienes que implementar tu propio esquema xml para formatear tus datos, y la serialización es tan fácil como una llamada a_plist) además, el sdk viene con código nativo para manejando plists.

Pero, si todo listo tiene un servicio web que devuelva en JSON/XML es posible que desee mantener eso y analizar las cosas en el iPhone usando el material ya se ha mencionado (TouchXML, JSON-marco)

+0

suena interesante ya que prefiero no entrar en XML en el teléfono si no tengo que ... ¿hay alguna manera de especificar que desea un resultado plist cuando realiza la solicitud (como rails does for xml?) . ¿O simplemente proporciona un punto final/parámetro api diferente para especificar que desea los resultados como un plist? – frankodwyer

+0

podría trabajar algo mágico con rutas para modificar la url de una acción determinada y forzar un formato específico, luego use las respuestas_para tratar en el controlador. O, como dijiste, solo usa un punto final dedicado para las cosas plist (eso es lo que hago) – diclophis

1

Tenga cuidado con NSURLConnection en el iPhone. Se sabe que tiene fugas de memoria que pueden bloquear una aplicación muy rápidamente. Si está haciendo muchas solicitudes HTTP, no espere que NSURLConnection funcione para usted. Encuentre algo más, posible envoltorio de rizo.

Cuestiones relacionadas