Estoy escribiendo una aplicación para iPhone como un proyecto de hobby y necesitaré un servicio web para proporcionarle datos. No es muy diferente de lo que hago en el trabajo, pero en el trabajo solo escribo vistas y controladores. Alguien más es responsable de escribir el modelo y, por lo general, los clientes proporcionan el servicio web.
He hecho algo de programación web antes, cuando todo el mundo usaba MySQL y PHP, por lo que mis habilidades están un poco desactualizadas, pero estoy seguro de que podría usar las técnicas que ya conozco. Sin embargo, no quiero perder el tiempo usando herramientas obsoletas. Descubrí que el estado del arte sería escribir una API REST. Estaba pensando que debería haber algunos marcos bastante buenos que prácticamente solo le brinden una API REST con funcionalidad CRUD tan pronto como haya definido un modelo.
Supongo que mi pregunta es: ¿Cuál sería la forma más rápida de poner en funcionamiento una API REST? Realmente solo quiero centrarme en escribir la aplicación para iPhone y no dedicar demasiado tiempo a esta API. Sería genial si pudiera obtener la administración web y el historial de revisiones también. También debo agregar que se supone que la API no es pública, por lo que la compatibilidad con la autenticación también sería excelente.
Para ser claro. No me importaría un framework PHP. De hecho, posiblemente podría ser mejor ya que sé que mi hosting actual lo admite.
Respuestas:
EDITAR:
Los enlaces a continuación, que aparentemente fueron buenos durante 3 años, ya no funcionan, así que fui y encontré un par de nuevos tutoriales que creo que se van a quedar por un tiempo. Estos se encuentran en el sitio de Ray Wenderlich, un sitio de tutoriales para desarrolladores de iOS muy respetado. El primer artículo en realidad hace referencia a los enlaces rotos a continuación, pero está completo en sí mismo:
Cómo escribir un servicio web PHP / MySQL simple para una aplicación iOS
y el segundo tiene un pequeño giro. Usó parse.com en el backend y AFNetworking. Ambos son bastante excelentes.
Cómo sincronizar datos básicos con un servicio web - Parte 1
He arreglado los enlaces rotos a continuación al encontrar los artículos en la máquina de camino de regreso. Parece que a la gente le gustan los enlaces, así que los conservaré. Los enlaces anteriores deberían proporcionar más elementos en los que pensar.
Estoy haciendo exactamente lo mismo con mi aplicación para iPhone. Encontré este artículo sobre la construcción de una API RESTful en PHP:
https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
y también hay un artículo de seguimiento aquí:
https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/
con un enlace al código fuente al final del artículo.
fuente
He programado una API REST en ZEND Framework usando Zend_Rest_Controller, en el iPhone usé ASIHTTPRequest . Mi experiencia con ambos fue buena. Al principio tuve algunos problemas para configurar ZEND y conectarlo a mySQL, pero una vez que descubrí cómo hacerlo, pude escribir la API muy rápidamente. Puedo compartir más información con usted si tiene más preguntas.
EDITAR: Parece que no hay documentación oficial sobre
Zend_Rest_Controller
. Este enlace describe cómo usarlo para crear su API. Simplemente tiene que deshabilitar el renderizado eninit()
su subclase e implementar los métodos para cada llamada REST.fuente
Sólo para hacerle saber:
Terminé usando Ruby on Rails.
EDITAR: Dado que esta respuesta ha sido rechazada por no proporcionar la razón detrás de la elección de Ruby on Rails y tampoco instrucciones sobre cómo escribir una API REST con ella, pensé en darte mi motivación y algunas instrucciones simples.
Comencé a leer un libro sobre Ruby on Rails y me di cuenta de que todo lo que tenía que hacer era usar andamios y obtuve una API JSON REST gratis.
Aquí hay una buena guía para comenzar: http://guides.rubyonrails.org/getting_started.html
Cuando tiene su entorno Ruby on Rails en funcionamiento, crear su API REST no es más difícil que ejecutar:
$ rails generate scaffold Post name:string title:string content:text
(Ejemplo del enlace anterior). También descubrí que Rails es muy fácil y gratuito de implementar en heroku , lo que significa que no tuve que pagar por el alojamiento de mi API REST muy básica y de bajo tráfico. Hay muchas otras razones por las que estoy muy feliz de trabajar con Ruby on Rails, pero eso está más allá del contexto de esta pregunta.
fuente
Seguí un tutorial bastante simple para crear API RESTful con PHP:
Corey Maynard: creación de una API RESTful con PHP
El concepto principal incluye:
fuente
¿Y Python?
Usaría Python, Django y Piston.
Sin experiencia con Python o Django, probablemente le llevará un día desarrollar esta solución y todo el código se prueba y se demuestra que funciona .
fuente
Si desea utilizar PHP, le recomiendo utilizar el marco CodeIgniter con el servidor REST de Phil Sturgeon:
http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2
https://github.com/philsturgeon/codeigniter-restserver
fuente
Consulte la siguiente clase de PHP que sigue a MVC. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html
Espero que esto ayude.
fuente
Si ya conoce PHP, no hay nada de malo en un backend PHP / MySQL. Puede enviar todas las respuestas en formato plist xml compatible con iPhone y convertir instantáneamente la respuesta en una estructura de datos NSDictionary / NSArray / NSNumber con este breve fragmento de código:
NSString *response = [request responseString]; NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding]; NSPropertyListFormat format; NSString *errorStr; NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr];
También utilizo el paquete ASIHTTP para formar URL, enviar solicitudes asincrónicas y recibir las respuestas, lo recomiendo encarecidamente:
http://allseeing-i.com/ASIHTTPRequest/
fuente
Debe utilizar los idiomas con los que se sienta cómodo para el servicio web. Cualquier lenguaje que pueda formular respuestas REST a las solicitudes está bien.
Dicho esto, si quieres que algo funcione rápidamente, te sugiero que uses Python en Google App Engine. Es gratis y puede usar Java en lugar de Python si así lo desea. App Engine admite la autenticación mediante OpenID y / o cuentas de Google (no estoy seguro de si son mutuamente excluyentes), por lo que debería facilitar la codificación.
En cuanto a realizar las solicitudes en el dispositivo iOS, sugiero usar ASIHTTPRequest .
fuente
Otra opción es restSQL, un marco de persistencia ultraligero. Ver http://restsql.org . Es compatible con MySQL y PostgreSQL y se ejecuta en un contenedor estándar Java EE, por ejemplo, Apache Tomcat.
restSQL es una capa de acceso a datos muy poco convencional. restSQL no es una vista orientada a objetos de la base de datos. Presenta "vistas" planas o jerárquicas de tablas de bases de datos relacionales. Estas vistas se pueden consultar y actualizar a través de una API simple de Java o HTTP basada en REST. La interfaz HTTP se basa en los principios REST, que utilizan las funciones integradas de HTTP, en lugar de abstraerse de ellas.
Quieres una 'API REST con funcionalidad CRUD' y ese es exactamente el punto óptimo de restSQL. Podrías hacer esto sin código. Simplemente defina sus recursos SQL a través de archivos XML y comience a realizar llamadas HTTP contra ellos con capacidad CRUD completa.
fuente