2011-02-11 21 views
80

Estoy escribiendo una aplicación para iPhone como un proyecto de hobby y necesitará un servicio web para proporcionarle los 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 generalmente los clientes proporcionan el servicio web.¿Cómo escribir una API REST?

He hecho algo de programación web antes, cuando todos usaban MySQL y PHP, por lo que mis habilidades están un poco desactualizadas, pero estoy seguro de que podría aprovechar las técnicas que ya conozco. Sin embargo, no quiero perder el tiempo usando herramientas obsoletas. He descubierto que el estado del arte sería escribir una API REST. Estaba pensando que debería haber algunos marcos bastante buenos que simplemente te ofrezcan una API REST con funcionalidad CRUD tan pronto como hayas definido un modelo.

Supongo que mi pregunta es: ¿Cuál sería la forma más rápida de poner en marcha una API REST? Realmente solo quiero centrarme en escribir la aplicación iPhone y no perder demasiado tiempo en esta API. Sería genial si pudiera obtener la administración web y el historial de revisión también. También debería agregar que se supone que la API no es pública, por lo que el soporte para la autenticación sería excelente.

Solo para ser claro. No me importaría un framework PHP. De hecho, podría ser mejor ya que sé que mi alojamiento actual lo admite.

+1

resto no es probable que lo que realmente quiere: https://medium.com/@trevorhreed/you-re-api-isn-t-restful-and-that-s-good-b2662079cf0e – Trevor

+2

Usted podría utilizar [este script de 66 líneas PHP] (https://github.com/mevdschee/php-crud-api/blob/master/extras/core.php) Escribí. – mevdschee

+0

Respondido 5 años después 8-) – JustOnUnderMillions

Respuesta

7

Sólo para hacerle saber:

Terminé usando Ruby on Rails.

EDIT: Dado que esta respuesta ha sido downvoted por no proporcionar la razón detrás de la elección de Ruby on Rails y también hay instrucciones sobre cómo escribir una API REST con él, pensé que le daría mi motivación y unas sencillas instrucciones .

Empecé a leer un libro sobre Ruby on Rails y me di cuenta de que todo lo que tenía que hacer era utilizar andamios y obtuve una API JSON REST de forma gratuita.

He aquí una buena guía para empezar: http://guides.rubyonrails.org/getting_started.html

Cuando tienes tu Ruby on entorno de Rails en funcionamiento, la creación de su API REST no es más difícil que administrar:

$ rails generate scaffold Post name:string title:string content:text 

(Ejemplo del enlace de arriba). También encontré que Rails es muy fácil y gratuito de implementar en heroku, lo que significaba que no tenía que pagar por el alojamiento de mi API REST muy básica y de poco tráfico. Hay muchas otras razones por las cuales estoy muy contento de trabajar con Ruby on Rails, pero eso está más allá del contexto de esta pregunta.

+10

dándose una respuesta y luego dándole una marca de verificación mala forma hombre MUY mal forma. – thenetimp

+28

@thenetimp No hay nada malo en responder a su propia pregunta. De hecho, es alentador, siempre y cuando sea una respuesta correcta y no haya sido otorgada por nadie más. No ganas ningún representante por aceptar tu propia respuesta, así que realmente no veo qué podrías tener en contra de ella. –

+3

sería mejor si diera su razonamiento para elegirlo – mustafa

0

Debe usar 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 desea obtener algo rápido, le sugiero usar Python en Google App Engine. Es gratis y puedes usar Java en lugar de Python si lo deseas. App Engine admite autenticación utilizando OpenID y/o cuentas de Google (no estoy seguro si son mutuamente excluyentes), por lo que debería facilitar el código.

En cuanto a hacer las solicitudes en el dispositivo iOS, sugiero usar ASIHTTPRequest.

3

¿Qué hay de Python?

Usaría Python, Django y Piston.

  1. Me generar modelos de Django desde su existente DB usando inspectdb.
  2. Agregue el Django admin a sus modelos.
  3. Agregue Django Piston a su aplicación.
  4. Beneficio.

Sin experiencia con Python o Django probablemente le lleve un día desarrollar esta solución y todos los códigos están probados en unidades y proved to work.

+1

wow ese código en Piston parecía tan limpio ... – JGallardo

1

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.

+7

Recomiendo usar ** todo ** de phpclasses.org. Muchas clases en ese sitio no han sido probadas, inseguras, escritas por script kiddies. Busque un lugar más confiable como PEAR o Zend – Dmitri

+12

Más de 3000 desarrolladores de PHP enviaron paquetes al sitio de PHPClasses. Algunos son mucho más capaces que otros. Muchos incluso son contribuyentes de PEAR y Zend. Decirles a las personas que no usen un paquete distribuido en ese sitio solo porque encontraste algunos paquetes que dices que no han sido probados e inseguros, es puro prejuicio.El paquete recomendado por @src pasa a ser un paquete mejor calificado. Hubiera sido mejor si uno mira en el código de paquete o por lo menos que el usuario votaciones antes de decidir generalizar en contra de todo sólo porque se distribuye en el sitio. – mlemos

0

Si ya conoce PHP, no hay nada de malo con un backend de PHP/MySQL.Puede enviar todas las respuestas en formato plist XML compatible con iPhone, y al instante convertir 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 la formación de direcciones URL , el envío de requets asíncronos, y recibir las respuestas, le recomiendo que:

http://allseeing-i.com/ASIHTTPRequest/

8

he programado una API REST en ZEND Framework utilizando el Zend_Rest_Controller, en el iPhone que utiliza 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 en Zend_Rest_Controller. This link describe cómo usarlo para crear su API. Simplemente tiene que deshabilitar la representación en el init() de su subclase e implementar los métodos para cada llamada REST.

+0

no veo ninguna ZEND_Rest_Controller en Zend sitio. Veo ZEND_Rest_Server. ¿Es este de quien hablas? – Dmitri

+2

un vistazo aquí para un buen comienzo sobre cómo utilizar zend_rest_controller: http://techchorus.net/create-restful-applications-using-zend-framework .creating una API REST es sin esfuerzo con esta clase –

+0

Esto parece ser más o menos exactamente lo que necesito Lo probaré y si tengo éxito, lo aceptaré como mi respuesta. Gracias. –

40

EDIT:

Los enlaces inferiores que al parecer fueron buenas durante 3 años ya no están trabajando, así que fui y encontré un par de nuevos tutoriales que creo que van a quedarse por un tiempo. Estos se encuentran en el sitio de Ray Wenderlich, un sitio tutorial de desarrollo ios muy respetado. El primer artículo en realidad hace referencia a los siguientes enlaces rotos pero es completo en sí mismo:

How To Write A Simple PHP/MySQL Web Service for an iOS App

y el segundo tiene un pequeño giro a la misma. Usó parse.com en el backend y AFNetworking. Ambos son bastante excelentes.

How To Synchronize Core Data with a Web Service – Part 1


he fijado los enlaces rotos a continuación mediante la búsqueda de los artículos en el camino de regreso de la máquina. A la gente parece gustarle los enlaces, así que los guardaré. Los enlaces de arriba deberían proporcionar más comida para pensar.


Estoy haciendo exactamente lo mismo con mi aplicación de iPhone. He encontrado este artículo en la construcción de una API REST 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 en la parte inferior de la artículo.

+2

Estos enlaces parecen como si estuvieran ahora el tiempo de espera. Si eso está sucediendo para cualquier otra persona, no estoy seguro. :/ –

0

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 Java EE estándar, p. 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 son consultables y actualizables a través de una simple API de HTTP o Java basada en REST.La interfaz HTTP se basa en los principios de REST, que utilizan las funciones incorporadas de HTTP, en lugar de abstraerse de ellos.

Desea una "API REST con funcionalidad CRUD" y eso 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 hacer llamadas HTTP contra ellos con la capacidad CRUD completa.

6

que siguieron un tutorial muy sencillo para la creación de APIs REST con PHP:

Corey Maynard - Creating a RESTful API with PHP

The concepto principal incluye:

  • una clase abstracta que se encarga del análisis de la URI y devolver la respuesta, y
  • una clase concreta que se compone de sólo los puntos finales de la API.
+1

Esto fue muy útil para mí, gracias. –