¿Cómo escribir una API REST?

82

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.

Erik B
fuente
1
DESCANSO probablemente no sea lo que realmente quieres: medium.com/@trevorhreed/…
Trevor
2
Podrías usar este script PHP de 66 líneas que escribí.
mevdschee
Respondido 5 años después 8-)
JustOnUnderMillions

Respuestas:

42

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.

nickfox
fuente
2
Parece que estos enlaces se están agotando ahora. Si eso le está sucediendo a alguien más, no estoy seguro. : /
Augie Gardner
8

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 en init()su subclase e implementar los métodos para cada llamada REST.

Philipp
fuente
No veo ningún ZEND_Rest_Controller en el sitio de Zend. Veo ZEND_Rest_Server. ¿Es este del que estás hablando?
Dmitri
2
Eche un vistazo aquí para obtener un buen comienzo sobre cómo usar zend_rest_controller: techchorus.net/create-restful-applications-using-zend-framework. Crear una api de descanso es fácil con esta clase
Philipp
Esto parece ser más o menos exactamente lo que necesito. Lo probaré y, si tengo éxito, aceptaré esta como mi respuesta. Gracias.
Erik B
4
Supongo que no tuvo éxito ...: D
user151841
8

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.

Erik B
fuente
10
darte una respuesta y luego darle una marca de verificación de mala forma hombre MUY mala forma.
thenetimp
29
@thenetimp No hay nada de malo en responder tu propia pregunta. De hecho, se recomienda, siempre que sea una respuesta correcta y no la haya dado nadie más. No obtienes ninguna reputación por aceptar tu propia respuesta, por lo que realmente no veo qué podrías tener en contra.
Erik B
3
sería mejor si dieras tu razonamiento para elegirlo
mustafa
4
@Nate Recomendaría Ruby on Rails a cualquiera que desee escribir una API REST, por lo que no eliminaré mi respuesta. Sin embargo, leí sus comentarios y actualicé mi respuesta. Espero que te guste.
Erik B
2
@ DennisKrøger si la pregunta es "¿Cómo escribir una API REST?" luego "Usé RoR. Aquí hay una guía para comenzar con sus andamios" es una respuesta totalmente adecuada.
Mattygabe
8

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:

  • una clase abstracta que maneja el análisis del URI y devuelve la respuesta, y
  • una clase concreta que consta solo de los puntos finales de la API.
jim_kastrin
fuente
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.

Shauvik
fuente
7
No recomiendo encarecidamente el uso de nada de phpclasses.org. Muchas clases en ese sitio no han sido probadas, son inseguras y están escritas por script kiddies. Busque en algún lugar más respetable como PEAR o Zend
Dmitri
13
Más de 3000 desarrolladores de PHP enviaron paquetes al sitio PHPClasses. Algunos son mucho más capaces que otros. Muchos incluso son también contribuidores de PEAR y Zend. Decirle a la gente que no use un paquete distribuido en ese sitio solo porque encontró algunos paquetes que usted dice que no han sido probados e inseguros es un prejuicio puro. El paquete recomendado por @src resulta ser un paquete mejor calificado. Hubiera sido más prudente si hubiera mirado el código del paquete o al menos las calificaciones de los usuarios antes de decidirse a generalizar contra todo solo porque está distribuido en el sitio.
mlemos
0

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/

Bogatyr
fuente
0

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 .

Moshe
fuente
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 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.

Mark Sawers
fuente