¿Por qué usar un micro framework? En las redes sociales, es común que los nuevos desarrolladores de PHP pregunten: "¿Qué framework debo usar para mi proyecto?" y las respuestas generalmente son "Laravel" o "Symfony".
Si bien ambas son buenas opciones, la respuesta correcta debería ser: "¿Qué necesitas que haga el framework?"
El framework adecuado debe ser aquel que cumpla con lo que necesitas, sin estar lleno de características que nunca vas a usar.
Si estás creando un sitio web con una sola ruta, usar Laravel o Symfony sería sobre-ingeniería, mientras que para un sitio complejo, Laravel o Symfony pueden ser la elección adecuada.
Los micro frameworks son ideales para construir sitios pequeños o medianos que no requieren todas las características que ofrece un framework completo.
Existen varios micro frameworks, pero Slim y Flight PHP son dos buenos ejemplos.
Recientemente, construí un pequeño sitio web que pedía al usuario resolver 10 preguntas relacionadas con bases de datos. El sitio tenía tres rutas y algunas consultas básicas para obtener las preguntas y comparar las respuestas.
Para un proyecto pequeño como este, un micro framework es una gran elección. Construí el sitio tanto en Slim como en Flight PHP para compararlos.
Si no has usado un framework en particular antes, el uso del proyecto skeleton proporcionado generalmente es un buen punto de partida.
El proyecto skeleton de Flight PHP fue justo lo que esperaba: liviano, con una configuración simple de MVC, fácil de entender la estructura de carpetas y saber dónde debería ir todo en el proyecto.
Para alguien nuevo en el framework, la curva de aprendizaje para comenzar es mínima.
Es ligero en cuanto a bibliotecas de Composer, solo cinco en total (incluyendo la biblioteca principal), cuatro usadas en producción.
El tamaño en producción del skeleton fue de 1.6 MB.
El proyecto skeleton de Slim me sorprendió. La estructura de directorios era más compleja de lo que anticipaba, más orientada a una estructura que podría usarse en un proyecto más grande que en uno pequeño. Para un micro framework, no era lo que esperaba.
El skeleton de Slim fue un poco más pesado que el de Flight PHP, con 21 bibliotecas de Composer, 9 usadas en producción, y un tamaño de producción de 3.3 MB.
Ambos funcionaron sin problemas con mínima configuración adicional necesaria.
En lugar de usar los skeletons, decidí construir los sitios creando mi propia configuración. La ventaja de hacer esto es que pude adaptar los frameworks a mis necesidades y ver qué tan flexibles eran ante diferentes estructuras.
Una de las grandes ventajas de usar micro frameworks es la capacidad de construirlos para que hagan exactamente lo que necesitas sin sobrecarga innecesaria, agregando características y bibliotecas según se necesiten.
Mi configuración con Flight PHP no fue muy diferente del skeleton. Si bien terminé con menos directorios y diferentes bibliotecas de Composer, estructuralmente fue similar.
Con Slim, la estructura del proyecto terminó siendo significativamente diferente del skeleton.
Fue agradable ver que Slim era flexible y no hacía suposiciones sobre la estructura, funcionando perfectamente con una estructura completamente diferente a la del skeleton.
Flight PHP también es flexible en este sentido, permitiendo estructuras más complejas si es necesario. Agregar nuevas bibliotecas al framework fue sencillo.
Ruteo
Desde el punto de vista del ruteo, ambos fueron agradables de trabajar. Fueron fáciles de configurar sin necesidad de leer demasiada documentación.
Las rutas en Flight PHP fueron un poco más simples de configurar que en Slim y usaron menos código, pero ninguna fue difícil de implementar.
Los grupos de rutas, las capacidades de regex y las opciones de middleware hicieron que las rutas fueran flexibles y fáciles de trabajar.
Conexiones a la base de datos
Con Slim, se espera que uses un ORM como Eloquent o Doctrine para tus consultas de base de datos, mientras que Flight PHP proporciona un simple envoltorio para PDO que puedes usar si lo necesitas. Además, opcionalmente, Active Record se puede añadir al proyecto para construir consultas.
Para un proyecto pequeño como el mío, usar un ORM parecía innecesario, así que terminé construyendo una pequeña clase envoltura de PDO para Slim, similar a la que viene integrada en Flight PHP.
Los ORMs son geniales, pero tener la flexibilidad de elegir cómo codificar las consultas a la base de datos es una gran característica.
Código general
Tanto Slim como Flight PHP permiten escribir código a tu manera.
Algunos frameworks tienden a forzarte a codificar de una manera específica, y a veces puede parecer que estás luchando contra el framework.
Los frameworks deberían trabajar contigo, no contra ti, y ambos me dieron esa sensación.
Slim también proporciona algunos complementos útiles, como la integración de CSRF y el caché HTTP.
Flight PHP ofrece complementos adicionales como Permisos y Active Record.
Todas estas son adiciones útiles sin tener que usar soluciones de terceros o construir las tuyas propias.
Devolver JSON como respuesta es más limpio en Flight PHP que en Slim. Slim 3 tenía una conveniente respuesta withJson
. Mientras que Slim 4 sigue más los estándares PSR-7, lo que significa que para construir una respuesta en JSON se necesita más código.
Si usara respuestas JSON con frecuencia, probablemente crearía un envoltorio para hacerlo más conveniente mientras sigo adhiriéndome al estándar PSR-7.
Esta es una diferencia significativa entre los dos frameworks. Slim parece necesitar más adaptación mediante la creación de clases para limpiar y simplificar la base de código, mientras que Flight PHP ya ha hecho esto por ti.
Slim proporciona varios middleware auxiliares. El middleware es necesario para que algunas características funcionen.
Un ejemplo de esto es obtener datos de JavaScript usando FETCH. Slim tiene un método getParsedBody
para crear un array de datos a partir de la solicitud POST.
Sin embargo, para usarlo, el middleware addBodyParsingMiddleware
debe agregarse al contenedor.
Es una pequeña trampa para los nuevos desarrolladores, pero también proporciona acceso a características opcionales, lo que puede reducir la huella general del framework al habilitar solo las funciones que necesitas.
Flight PHP logra esto a través de un archivo de configuración; algunas características se pueden activar y desactivar a través de la configuración en lugar de habilitarlas mediante middleware.
Pruebas de velocidad
Según los benchmarks, comparar ambos frameworks tiene resultados interesantes. Slim supera a Flight PHP en algunas áreas, mientras que Flight PHP supera a Slim en otras.
Al poner a prueba mi propio código, Flight PHP mostró tiempos de respuesta más rápidos y consistentes que Slim.
GET request devolviendo JSON
POST request devolviendo JSON
Pruebas de respuesta
Lo que me pareció digno de mención fueron los picos de valores atípicos al usar Slim.
Realizar estas pruebas varias veces produjo resultados similares a los que he mostrado anteriormente, con tiempos de respuesta generalmente buenos para ambos, pero con picos atípicos en Slim que no ocurrieron al probar Flight PHP. Además, Flight PHP generalmente tuvo mejores tiempos de respuesta.
Si no has probado los micro frameworks, dales una oportunidad. Hay varios por ahí, y puede ser una gran experiencia de aprendizaje probarlos y ver qué te gusta y qué no en cada uno.
Tanto Slim como Flight PHP son grandes micro frameworks.
Slim es un framework sólido con características útiles que trabajarán en silencio para ti.
Flight PHP es más liviano, y su simplicidad hace que aprenderlo sea realmente fácil.
Buenos tiempos de respuesta y un código más simplificado para lograr lo mismo lo convierten en una muy buena opción para usar como micro framework.
Después de comparar estos dos lado a lado, prefiero Flight PHP sobre Slim, pero como con cualquier framework, pruébalo y ve si funciona para ti.
Al final, el framework correcto es aquel que hace lo que necesitas que haga.
Jorge García
Fullstack developer