2009-10-12 12 views
29

has estado luchando con esto por algún tiempo. Estoy intentando acceder a una API REST en mi iPhone y encontré el marco ASIHTTP que me ayudaría. Así que hice algo así comoObjective-C: la mejor manera de acceder a REST API en tu iphone

//call sites, so we can confirm username and password and site/sites 
NSURL *url = [NSURL URLWithString: urlbase]; 
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 
[request setUsername:@"doronkatz%40xx.com" ]; 
[request setPassword:@"xxx"]; 

Dónde urlbase es una URL a un sitio RESTO.

Ahora, un desarrollador me ha dicho que podría haber un problema o error en este marco y que no está pasando los encabezados correctamente. ¿Hay alguna otra forma de probar o acceder con autenticación a una ubicación de REST de red?

+1

+1 Después de esta pregunta, sin embargo, debe formatear el código para que SO pueda mostrarlo correctamente. No puedo editar lo contrario, pero coloco 4 espacios delante de cada línea de tu código y se verá como código. –

+0

siento compañero enfermedad hace que en el futuro – Doz

+0

http://github.com/sdegutis/CocoaREST – indragie

Respuesta

31

Recomendaría revisar RestKit: http://restkit.org/ Proporciona una excelente API para acceder a los servicios web RESTful y representar los recursos remotos como objetos locales, incluida la persistencia en Core Data. La autenticación HTTP se admite de forma inmediata.

+2

en 0.20.0 ¿cómo se realiza la autenticación básica? Los únicos ejemplos que puedo encontrar se relacionan con 'RKClient' pero esto se ha eliminado en 0.20.0. Su ayuda es muy apreciada. –

6

Tengo un par de aplicaciones que usan un marco llamado Objective Resource que proporciona un contenedor para acceder a las API basadas en REST remotas. Está dirigido principalmente a aplicaciones basadas en Ruby on Rails, por lo que su análisis XML/JSON puede ajustarse para manejar algunos valores predeterminados de Rails, pero vale la pena analizarlo. Es compatible con la autenticación básica http de forma predeterminada.

1

He usado ASIHTTP en dos aplicaciones hasta ahora y no he tenido problemas.

Parece que está haciendo HTTP Basic Auth con el sitio remoto. Intente presionar la misma URL REST desde un navegador estándar y pase los parámetros que necesita. Debería pedirte un nombre de usuario/contraseña. Si lo hace, al menos sabrá que el lado del servidor está configurado para manejar las solicitudes. Si no es así, entonces necesita tener una conversación con el desarrollador.

Lo siguiente que debes probar es poner un rastreador de red basado en Mac y ver qué encabezados van y vienen. Cualquiera de HTTPScoop, Wireshark o Charles debería funcionar. Ejecute el sniffer como un proxy de red, luego ejecute su aplicación en el simulador y observe lo que sucede. Inténtalo de nuevo con el navegador. Una vez que vea las diferencias, puede usar el método addRequestHeader en ASIHTTPRequest para agregar los encabezados específicos que el servidor espera.

+0

Hola Ramin he intentado usar ASIHTTPRequest, incluso con la API de Twitter para ver si puedo hacer funcionar un encabezado, usar addRequestHeader y usar HTTPScoop, pero no muestra que los encabezados se están pasando a él. – Doz

+0

¿Qué encabezados estás buscando? Y cuando accedes a la misma URL con el navegador, ¿obtienes lo que estás buscando en HTTPScoop? Si obtiene encabezados del navegador pero no en ASIHTTP, entonces puede querer presentar un informe de error con el desarrollador. – Ramin

+0

Bueno para cualquiera de los sitios en los que estoy trabajando, con HTTPSchool obtengo una respuesta diciendo que se necesita autenticación. Con Twitter, puedo poner el nombre de usuario y la contraseña en el archivo URL, pero cuando lo puse como addRequestHeader, HTTPSchoop no muestra que he puesto ningún encabezado. Es por eso que me estoy preguntando que debe haber algo con ASIHTTP. – Doz

2

Acabo de tropezar con esta pregunta - usted puede encontrar LRResty bastante interesante, ya que utiliza NSOperation, bloques, etc., ver: GitHub para la fuente (licencia MIT). Estoy experimentando con esto ahora, también tiene una aplicación de muestra.

10

Soy nuevo en el desarrollo de iOS y he estado luchando con algunos de los grandes frameworks listados en esta página durante el último mes. Ha sido una pesadilla. Honestamente, te recomiendo que te limites a lo básico y lo hagas tú mismo usando AFNetworking o el propio NSURLConnection de Apple.

Una de las bibliotecas enumeradas ya no se actualiza. Otro sufrió cambios enormes en la API de descifrado recientemente y ahora la mitad de los tutoriales que describen su uso ya no funcionan. Otros están masivamente hinchados.

Es más fácil de lo que piensas. Algunos recursos que me ayudaron:

Los ejemplos en la AFNetworking homepage solo pueden conseguir que el 80% del camino.

ACTUALIZACIÓN: El Mantle Framework (abierto por Github Inc.) está bien diseñado y es fácil de usar. Maneja el mapeo de objetos : convirtiendo un JSON NSDictionary en sus propias clases de modelos de Objective-C. Maneja los casos predeterminados con sensatez y es muy fácil transferir sus propios transformadores de valor, p. desde una cadena a NSURL o una cadena a su medida personalizada enum.

Cuestiones relacionadas