Construyendo una API REST con Lumen

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.

  • indexel método devuelve todos los productos disponibles como una respuesta JSON.
  • createel método crea un nuevo product y devuelve el product recién creado como una respuesta JSON.
  • showel método devuelve un único recurso de producto por su id. Esto también se devuelve como una respuesta JSON.
  • update método actualiza un único recurso de producto por su id también.
  • delete método elimina un recurso de producto por su id y devuelve un mensaje success.

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í.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.