Recientemente desarrollé una API con Laravel para un mini proyecto en el que trabajamos un par de amigos y yo. Decidí construir otra API pero con Lumen en su lugar, ya que es un framework mucho más ligero y rápido que Laravel.
Lumen es un microframework construido sobre los componentes principales de Laravel. Lumen utiliza muchos conceptos familiares de Laravel como Eloquent, caché, enrutamiento, middleware y su contenedor de servicios. Una de las principales ventajas de Lumen es su velocidad, como resultado el marco está diseñado para la construcción de micro-servicios rápidos o APIs.
Aunque este tutorial es sobre Lumen, una simple comprensión de cómo funciona Laravel es todo lo que necesitas para seguir adelante.
Hay varias maneras de configurar Lumen localmente. Por el bien de este tutorial, lo haremos a través de composer
. Puedes consultar otras formas de configurar Lumen aquí.
Desde su terminal, ejecute: composer create-project — prefer-dist laravel/lumen lumen_api
Esto instalará Lumen y todas sus dependencias en el directorio lumen_api
. A continuación, cambiaremos el nombre del archivo .env.example
ubicado en el directorio root
a .env
El controlador cache
por defecto de Lumen en la versión 5.4 es memcached,
pero no lo necesitaremos para este tutorial. Sin embargo, cualquiera de los siguientes, array
database
y redis
son compatibles. Edite el archivo .env
y reemplace los valores por defecto CACHE_DRIVER
y QUEUE_DRIVER
con lo siguiente:
CACHE_DRIVER=array
QUEUE_DRIVER=database
Para servir nuestro proyecto localmente, podemos hacer uso del servidor incorporado de PHP ejecutando el siguiente comando:php -S localhost:8000 -t public
Visite localhost:8000
en su navegador y debería ver la siguiente página.
Lo que vamos a construir
Vamos a construir una sencilla API REST que gestione las tareas de Crear, Leer, Actualizar y Borrar de un product resource
. Echemos un vistazo a nuestro endpoints
- GET /products – Fetch all product resource
- POST /products- Create a new product resource
- GET /product/{id} – Fetch a product resource by id
- PUT /product/{id} – Update a product resource by id
- DELETE /product/{id}-. Eliminar un recurso de producto por id
Base de datos y migraciones
Creemos nuestro archivo de migración. Ejecuta el siguiente comando:php artisan make:migration create_products_table
Esto te creará un nuevo archivo de migración en el directorio database/migrations
. Nuestro product resource
tendrá los siguientes atributos, name
, price
y description
.
Añada el siguiente código al archivo de migración recién creado.
Edite .env
con sus configuraciones database
y luego ejecute el siguiente comando para ejecutar la migración. php artisan migrate
Creando nuestro modelo de producto
Es posible que ya estés acostumbrado a crear models
y controllers
a través de los comandos artisan
en Laravel, pero lamentablemente Lumen no soporta esos comandos. Para ver la lista de comandos artisan
disponibles en Lumen, ejecuta:php artisan
Navega hasta el directorio app
y crea un nuevo model
llamado Product.php
A diferencia de Laravel, Lumen no carga inicialmente Eloquent y Facades. Para poder utilizarlas, tenemos que descomentar las siguientes líneas de código ubicadas en app\bootstrap.php
$app->withFacades();
$app->withEloquent();
Métodos del controlador
Creemos nuestro controller
. Navega al directorio app\Http\Controller
y crea un archivo ProductController.php
. Añade el siguiente código al controller
que acabas de crear.
-
index
el método devuelve todos los productos disponibles como una respuestaJSON
. -
create
el método crea un nuevoproduct
y devuelve elproduct
recién creado como una respuestaJSON
. -
show
el método devuelve un único recurso de producto por suid
. Esto también se devuelve como una respuestaJSON
. -
update
método actualiza un único recurso de producto por suid
también. -
delete
método elimina un recurso de producto por suid
y devuelve un mensajesuccess
.
Rutas
Es hora de añadir finalmente nuestro routes
. Abrimos el archivo web.php
de la carpeta routes
y añadimos el siguiente código:
Definimos agrupar nuestro routes
y añadir el prefix
api/v1
ya que es un parámetro común que comparten todos nuestros URIs
Consejo: Haz uso de Prefix para especificar parámetros comunes para tus rutas agrupadas
Sembrar nuestra Base de Datos
Antes de empezar a probar nuestro endpoints
, vamos a crear algunos datos de ejemplo con los que trabajar. Empecemos por crear nuestro seed
. Ejecute:php artisan make:seed ProductsTableSeeder
Esto creará un archivo ProductsTableSeeder.php
en el directorio database/seeds
. Edita el archivo con el siguiente código:
A continuación, edita el archivo DatabaseSeeder.php
en el directorio database\seeds
con el siguiente código:
Estaremos haciendo uso de la Fábrica de Modelos de Laravel y la Biblioteca Faker para generar los datos de muestra. Navega al directorio database\factories
y añade el siguiente código al archivo ModelFactory.php
.
A continuación, ejecuta:php artisan db:seed
Esto creará un montón de datos ficticios para nosotros en nuestro database
.
Probando nuestra API
Haremos uso de Postman para probar nuestra API. Puedes leer más sobre cómo empezar con Postman aquí.