Este artículo está basado en la publicación de MAREK GAJDA en The Software House Blog.
¿Es posible crear una API en el transcurso de un día o dos? Esto es exactamente lo que los autores del framework API Platform prometen. Sin embargo, probablemente nos preguntemos si realmente vale la pena dedicar tiempo a descubrir otra herramienta o construir un API desde cero.
Uno de los desafíos más importantes en el desarrollo de software es “no reinventar la rueda”. Es por eso que, desde el comienzo de la historia del desarrollo, los programadores han intentado crear soluciones que aceleraren su trabajo automatizando los procesos más repetitivos. Sin embargo, seleccionar las herramientas adecuadas que realmente cumplan con los requisitos que necesitamos es casi siempre un tema complicado.
Entre los frameworks / herramientas más prometedores que se han presentado recientemente en el mundo PHP se encuentra API Platform. He podido trabajar recientemente con él en un proyecto en mi actual emrpesa y puedo compartir algunas experiencias.
¿Que es API Platform?
API Platform fue creada en 2015 por un experto en Symfony, Kévin Dunglas. Se presentó en uno de los eventos de desarrollo más importantes en la SymfonyCon de París, junto con Platform.sh y Blackfire.io. Si bien la primera versión tenía algunos defecto, el framework ha mejorado enormemente en su versión 2. Pero ¿qué es lo que realmente hace API Platform?
API Platform es una herramienta basada en el framework PHP Symfony que te ayuda a acelerar la construcción de la parte de back-end de tu proyecto. Especialmente al comienzo del proceso de desarrollo (pero a veces también en etapas posteriores). Comúnmente, tenemos que implementar el mismo código una y otra vez sin ningún o con algunos pequeños cambios, por ejemplo al implementar el mecanismo de búsqueda o un sistema de autenticación. No importa si estás creando una aplicación para un sector u otro, seguramente habrá una lista de algunos elementos, un lugar donde puedes agregarlos, editarlo y, por supuesto, bórrarlo.
Los mecanismos que permiten acelerar el desarrollo de esas partes se conocen como CRUD y hay muchas herramientas en el mercado, que probablemente ya hayas utilizado. Lo nuevo en API Platform es que los tiempos han cambiado y ahora nos enfrentamos con un enfoque completamente diferente pensando en la arquitectura. Todas las soluciones anteriores estaban implementadas creando un monolito donde backend y frontend se encontraban totalmente acoplados. Actualmente, tendemos a implementar arquitecturas orientada a servicios con APIs de fondo que sirvan los datos y N clientes que la consumen, por ejemplo, aplicaciones frontend SPA o aplicaciones móviles. API Platform se centra solo en la creación del API, dejando la capa de presentación totalmente independiente.
¿Qué nos ofrece API Platform?
- Una API lista para usar basada en REST con una variedad de formatos para elegir: JSON, JSON-LD, XML, CSV. También podemos cambiar el formato con una alteración simple en un archivo de configuración. Todos los métodos sirven las opciones POST, PUT, GET y DELETE.
- La API está construida de forma segura sobre las mejores buenas prácticas de programación, usando uno de los frameworks PHP más populares: Symfony.
- Esta optimizada para emplear un sistema almacenamiento en caché a través de un sistema de tags (Varnish).
- Puede generar documentación generada e interactiva automáticamente.
- Es sencillo de implementar filtros, mecanismos de búsqueda o mensajes de error.
Si estuviéramos a punto de presentar una estimación para construir desde cero, una API que manejara 3 entidades de base de datos con algún tipo de autorización, filtros, paginación y documentación, se podría estimar alrededor de 2-3 semanas para implementar. Con API Platform se promete que podríamos prepararlo en un día.
¿Y donde se encuentra el inconveniente?
Si, existen inconvenientes, no todo es de color de rosa. Después de dejar preparada la configuración básica, las cosas tienden a ser algo poco más complicadas que en el tutorial básico de la documentación. Después de crear una base de datos y configurar todas las entidades y sus relaciones, es probable que necesitemos algunos campos personalizados o alguna lógica de negocio personalizada para su API. ¡Empiezas a buscar el código y lo que encuentras es que no hay ninguno! Tienes que hacer todo a través de los filtros especiales o crear controladores personalizados. Las soluciones para customizar la API requieren de un conocimiento avanzado en Symfony.
¿Es útil para proyectos sencillos o avanzados?
En realidad, la respuesta es ambos. El principal problema es la brecha intermedia. Si eres principiante y solo quieres crear una API muy simple, puedes usar esta herramienta con seguridad, pero no esperes que puedas personalizarla exactamente como lo desees. Si eres experto en Symfony, te resultará sencillo implementar filtros, validaciones o sistemas de autenticación.
API Platform no genera ningún código; si no que crea el contenido “sobre la marcha”. No es realmente una solución nueva, ya que existen herramientas similares disponibles, pero el mayor problema con estas soluciones es que generalmente tienen poca flexibilidad. Con API Platform es un diferente, ya que está construido empleando la buenas prácticas de Symfony, componentizado y basado en eventos, pensado para adaptarse a nuestras necesidades.
¿Que nivel de Symfony deberías tener antes de usar API Platform?
Si realmente necesitas hacer implementar temas avanzados en API Platform, primero deberías conocer Symfony. Si no lo conoces, primero debes concentrarte en entender cómo funciona Symfony. Aquí están los tres aspectos más importantes que deben conocerse:
- Sistema de Eventos: necesitas saber cómo funcionan los eventos en Symfony y a que eventos está enganchado API Platform, pudiendo personalizar cada listener.
- Serialización: todos los datos que se transfieren a través de API pasan por un componente de serialización integrado en Symfony. Debes conocer como trabaja la serialización y como indicamos que campos en que casos se devuelven en la respuesta.
- Inyección de dependencia: La idea general es que todas las cosas deben ser independientes entre sí desacoplando el sistema. Utilizando la inyección de dependencias mejoramos la mantenibilidad del código y es algo imprescindible en las aplicaciones actuales.
- Anotaciones: Las anotaciones comenzaron a ser una solución popular en Java y pronto migraron a otras plataformas, incluido PHP. El concepto básico es que usted defina cómo debe comportarse la clase o el método, comentándolo de manera apropiada en la parte superior
Conclusión
Si deseas crear rápidamente una API simple, esta herramienta es muy adecuada. Si quieres algo más, también es posible, pero, a menos que seas un experto en Symfony, necesitarás tiempo y práctica para lograrlo.
Al lanzar nuevas versiones, los desarrolladores que contribuyen con API Platform han demostrado que pueden aprender de sus propios errores y están escuchando a la comunidad respondiendo a las grandes necesidades, lo que se trata de una buena señal de que el framework va en una buena dirección.
Personalmente, creo que se tomó una buena decisión cuando se decidió utilizar API Platform en el proyecto en el que estoy involucrado, lo que ha permitido construir con agilidad una API en unos tiempos de desarrollo ajustados. Hemos de conocer las herramientas que tenemos a nuestro alcance para saber cuando emplearlas y aquello que nos proporciona y sus posibles inconvenientes.