Hace un tiempo sentí la necesidad de escribir una pequeña API solo por diversión, nada complejo, sin embargo cuando comencé a investigar las distintas opciones me encontré con un gran abanico de posibilidades con sus pro y contras.
Lo primero que hay que entender es que no todas las soluciones sirven para los mismos requerimientos, razón más que suficiente para realizar una investigación más profunda.
En PHP escribir un API no es algo imposible, todo lo contrario, si lo que queremos brindar es un mecanismo de consulta el asunto es bastante sencillo, sin embargo los grandes problemas que pude encontrar surgieron a la hora de autorizar y autenticar a nuestros usuarios y es justamente en ese punto donde muchos frameworks hacen agua.
Otro aspecto del desarrollo de APIs es que, y me duele decirlo, PHP no es una opción optima, por ejemplo con Ruby on Rails el desarrollo es tan sencillo que asusta. No obstante y como comenté en un principio todo depende de nuestras necesidades.
Una aclaración, la arquitectura de paradigma en la que base mi investigación es REST, específicamente del tipo RESTful que hoy en día es la arquitectura que típicamente utilizamos en casi todos los servicios web.
1. Recess framework. Una solución exclusiva para el desarrollo de APIs desde PHP. El proyecto tiene muy buena pinta pero honestamente esta bastante estancado, la ultima actualización del blog oficial fue en febrero del 2010.
Un punto muy positivo es que tiene una buena documentación con muchos ejemplos y tutoriales. Otro detalle que agradecemos es que tiene la capacidad “scaffolding” que ahorra muchísimo tiempo de desarrollo.
2. Slim. Un micro framework también exclusivo para el diseño de APIs. Su principal ventaja es su reducido tamaño, un proyecto compacto y muy interesante de cara al desarrollo de proyectos que no requieren autenticación (aunque tiene algunas cosas para realizar este trabajo).
Slim tiene una excelente documentación, comenzando desde aspectos muy sencillos como su instalación hasta ejemplos más complejos que utilizan bases de datos para realizar consultas y motor de plantillas.
3. Guzzle. Es uno de los proyectos más recientes en lo que se refiere al desarrollo de frameworks. Inclusive su última actualización se realizó hace apenas una semana.
Este framework tiene soporte para prácticamente todos los tipos de solicitudes HTTP: GET, HEAD, POST, DELETE, PUT, PATCH, y OPTIONS. También permite manejar conexiones persistentes y tiene un muy buen soporte para plantillas en lo que se refiere al esquema de direcciones URI.
Al igual que la mayoría de los frameworks de este tipo tanto la autenticación como la autorización se realiza mediante el protocolo HTTP, disponible tanto en su versión “Basic” y “Digest”. Pero en este caso veo que este aspecto se encuentra bastante maduro, inclusive pueden encontrar varios ejemplos para implementar este aspecto.
En definitiva es una muy buena opción, les recomiendo encarecidamente que le presten atención si están en la búsqueda de una plataforma para desarrollar su API.
4. Wave Framework. Otra micro framework que conocí gracias a StackOverflow, inclusive pueden encontrarlo en prácticamente todas las preguntas relacionadas al tema dentro de esta fantástica red social para programadores.
La principal ventaja es que se encuentra desarrollado con el efecto de modelo, vista y controlador. Se encuentra diseñado para aprovechar todas las ventajas de PHP 5.3 o superior, tiene sistema de cache, tanto de datos planos como de base de datos y permite utilizar APC o MemCache para este fin.
Tiene soporte completo tanto para Apache como NGINX y tiene una capa de seguridad contra los principales posibles ataques. Además tiene una guía de uso bastante importante. Otra opción para considerar.
5. Restler. Un framework interesante que esta pensado para brindar un buen servicio en las plataformas más populares: móviles, web y escritorio.
Su principal característica es su simplicidad. Tiene soporte para Linux, Windows y Mac. Soporta las solicitudes HTTP más comunes en este tipo de desarrollos (GET, POST, PUT, y DELETE). Y brinda varios formatos distintos para operar SON, XML, YAML, etc.
El proyecto completo se encuentra liberado bajo licencia LGPL.
6. Tonic. Estamos en presencia de otro micro framework. Este proyecto es muy sencillo y no tiene mucha de las características que otros frameworks brindan, sin embargo su forma de abordar el desarrollo de APIs lo convierten en una alternativa interesante para los más puristas, aquellos que buscan simplemente el puntapié inicial a la hora de comenzar un trabajo de estas características.
Tonic cuenta con una buena documentación en linea y un apartado de GitHub en donde podemos realizar consultas y obtener las ultimas actualizaciones.
Actualmente hay varias posibilidades más, pero estas son las que me parecieron más interesantes, especialmente hablando de frameworks que son exclusivos para esta tarea. Si analizamos frameworks completos una opción que recomiendo analizar es Laravel, que últimamente viene haciendo furor en la comunidad de programadores PHP. Y no olviden también mirar Yii que también cuenta con un extraordinario soporte para este tipo de trabajos.
Eduardo
12 años ago
SLIM esta muy bueno y se puede agregar muchas cosas yo he realizado 2 videos, instalación y configuración y un breve repaso por sus métodos GET y POST (admite también casi todo)
Saludos
Pablo
12 años ago
Gracias Eduardo por tu comentario. Genial lo de los videos, lo voy a tener en cuenta, la semana pasada me escribieron preguntando por un tutorial sobre ese framework, les voy a enviar el enlace a tus videos 😀
Eduardo Diaz
12 años ago
De nada es para apoyar a la comunidad
Lo mejor de la semana sobre desarrollo web en español vol. 28 | ADWE
12 años ago
[…] 6 Frameworks PHP exclusivos para el desarrollo de un API (RESTful) […]
Eleazar Resendez
12 años ago
Muy interesante post, ya que se nombran muchos frameworks ligeros y que dependiendo de las necesidades pueden ser muy útiles, yo solamente e usado Codeigniter y la verdad me fascina por su completa documentación.
Ranferi
12 años ago
Hola Pablo, mira necesito un consejo. Yo utilizo zend framework 2 para desarrollar paginas, pero la verdad es que soy demasiado purista. Practicamente en el Controlador hago todo lo de las operaciones y la llamada a la base de datos, el modelo dificilmente lo utilizo, tampoco utilizo las clases de Zend, mas que la de sesion. Mi pregunta es, viendo este punto que framework me recomendarias para trabajar sin utilizar un framework tan grande como ZF2.
Estaba viendo sobre Wave y Tonic. Cual crees que me conviene mas.
Saludos y gracias de ante mano.
Pablo
12 años ago
Hola Ranferi,
Para lo que necesitar hacer te recomendaría otro tipo de Framework no tan orientados al desarrollo de un API. Se me ocurre una opción: http://www.doophp.com/ es muy liviano y tiene unas opciones y características que te pueden interesar 🙂
theUniC
12 años ago
Hola Pablo,
Lo siento pero no puedo estar más en desacuerdo. Y no en la lista de frameworks que has elaborado y que obviamente resultará útil, sino en cómo has presentado tu investigación.
Para empezar, REST no es una arquitectura. REST es un estilo de diseño. En todo caso, cuándo se habla en términos de arquitectura se suele referir a ROA qué es el acrónimo de «Resource-Oriented Architecture» (Arquitectura Orientada a Recursos).
Y solo para aclarar, hablar de REST y RESTful es exactamente lo mismo. No existe diferencia alguna. No es que RESTful sea una especie de subconjunto de REST ni nada por el estilo.
Luego, me gustaría ver los razonamientos detrás de la afirmación «PHP no es una opción optima» , puesto que creo que este tipo de afirmaciones al no estar bien argumentadas hacen más daño que bien a quién lea tu artículo. PHP es una opción totalmente válida cuyo ecosistema de frameworks permite una gran velocidad de desarrollo. Así que hay que ir con un poco de cuidado, sobretodo en los argumentos que presentas. El porqué, es que no puedes comparar PHP con un framework de desarrollo cómo «Ruby on Rails», porqué es comparar peras con manzanas.
Es claro y evidente que si comparas la velocidad de desarrollo de PHP «a pelo» contra CUALQUIER framework por mal hecho que esté, un framework va a ser siempre la opción que presente un coste menor en términos de velocidad de desarrollo. Una comparación mucho más acorde hubiera sido «PHP vs Ruby» o «Rails vs Symfony».
Luego, en el listado de frameworks presentas librerías que no son propiamente frameworks de desarrollo lo cuál puede confundir un poco. Por ejemplo Guzzle, no es un framework de desarrollo. Es una libreria que te permite hacer clientes HTTP, pero solo clientes HTTP. No te permite desarrollar ninguna aplicación. Quizá hubiera estado mejor, dividir el listado en dos partes «Frameworks para desarrollar APIs» y «Clientes para consumir APIs».
Un saludo!
Christian.
Pablo
12 años ago
Hola theUniC,
No pidas disculpas por no estar de acuerdo, no hay ningún problema, que de los desacuerdos siempre se aprende 😀
Con respecto a lo que comentas, tengo algunas diferencias.
REST si es una arquitectura, inclusive se puede hablar de un conjunto o familia de arquitecturas. Luego cuando dices que REST es lo mismo que RESTful, no estoy de acuerdo. Y me parece que tiene mucho que ver con que no consideres a REST como una arquitectura. Aqui hay una explicación interesante: http://stackoverflow.com/questions/1568834/whats-the-difference-between-rest-restful
Con respecto a lo de PHP ahi si estoy más de acuerdo a que compararlo con un framework no es lo más justo. Y es justamente lo que me ocurrió cuando escribí mi API en PHP demore MUCHO más tiempo que cuando la reescribi en Rails. No fui justo, estoy de acuerdo.
Y finalmente Guzzle esta definido como un framework por su propio creador «Guzzle is a PHP HTTP client and framework for building RESTful web service clients.» https://github.com/guzzle/guzzle
Sin embargo no descarto que hubiese sido una buena opción la división 🙂
Un saludo y gracias por tu comentario Christian 😀