Como crear una API RestFul en Laravel (Primera parte)

Como crear una API RestFul en Laravel (Primera parte)

diciembre 2, 2018 Backend 0

Crear una Api en Laravel es muy sencillo, Laravel nos ofrece muchas herramientas para implementarla de manera más sencilla y rápida. Aquí explicare un poco el proceso de creación de una api de reseñas de productos, es una api muy sencilla, solo es para abarcar los aspectos fundamentales.

 

Crear el Proyecto

Primero se debe crear el proyecto en la consola de comandos.

Como ya he instalado proyectos Laravel antes, introduje esa línea, sino has creado ningún proyecto Laravel antes, te aconsejo pases a la guía rápida.

Primero antes de crear los controladores necesarios, necesitamos saber cuáles modelos vamos a implementar, es decir, diseñar la base de datos a implementar.

 

En este caso, omití la tabla usuario porque es la viene por defecto en Laravel, más adelante, mostrare la base de datos con todas las tablas.

Ahora si procederemos a crear los modelos que necesitemos, en este caso, necesitamos crear Producto y Resenias, de estos modelos, necesitamos crear las migraciones, seeder y Factory, hay un comando que me permite crearlas todo de una vez, pero yo decidí crearlas por separado.

Para producto:

 

Para Resenias:

Como cree por separado las migraciones de los modelos, se debe especificar en el modelo, cual es la tabla asociada a él.

Se crea la ruta asociada al controlador de Producto, tenemos la función apiResource, que nos indica solo las rutas que la api necesita, omite el create y edit de las rutas.

Se crea la ruta de las reseñas, tomando en cuenta que debe estar agrupado a los productos, ya que sin un producto no puede haber una reseña.

Podemos observar todas las rutas, tanto de Productos como de Resenias.

Creamos los campos que el producto necesita, se debe abrir el archivo de las migraciones de productos que hemos creado.

Ahora la migración de resenias, en este caso, especificamos que el campo producto_id proviene de la tabla productos.

Ahora bien, ya tenemos todas las rutas y las migraciones, pero aún no tenemos lista la configuración de la base de datos, sin ello, no estamos haciendo nada. Primero buscaremos el archivo de las variables de entorno llamado .env y cambiaremos las variables asociadas a la base de datos, cambiaremos DB_CONNECTION, DB_DATABASE, DB_USERNAME y DB_PASSWORD.

Una vez configuradas, realizaremos la migración.

Revisamos en nuestro gestor de base de datos, para verificar que creo las tablas de la base de datos. Las tablas migrations, password_resets y users viene por defecto.

Llenado de la base de datos – Factory

Cuando estamos en un entorno de pruebas, es recomendable usar seeder o Factory, en este caso, implementaremos Factory porque queremos muchos datos, así que crearemos un Factory por cada modelo que hemos creado, es decir, Producto y Resenia.

Para conocer un poco más como utilizar faker, se puede acceder al repositorio de Github. Crearemos nuestra Factory de Producto y Resenia.

Para implementar los Factory y que llene la base de datos, se debe introducir el siguiente comando:

 

Relaciones

Para poder acceder a las relaciones de la base de datos se debe establecer una función en cada modelo, especificando qué relación tiene, con que tabla y si son uno a uno, uno a muchos o muchos a muchos.

Dentro del modelo Resenia, se debe crear la función producto, indicando que pertenece a un producto. Es una relación de uno a muchos, es decir, un producto puede tener muchas reseñas y una reseña pertenece a un producto.

Para comprobar que la función está bien establecida, utilizaremos tinker dentro de la consola.

 

Recursos

Los recursos o Resources son ampliamente utilizados en una api Laravel, nos permite transformar lo que devuelve el json, asi no devuelve todos los datos de la base de datos, que el usuario no debería ver.

Se crea un recurso de tipo Collection, para mostrar una lista de datos.

En la siguiente captura se puede observar que devuelve todos los datos de la base de datos, eso no está muy bien visto.

 

Se crea un recurso de tipo recurso, solo para mostrar un dato.

En el archivo ProductoResource en la función toArray, indicar lo siguiente.

En el controlador de Producto, en la función show, indicar lo siguiente, con esto nos aseguramos que solo devolverá lo que nosotros queramos que vea el usuario.

Y esto nos devuelve la siguiente consulta, se ve mucho mejor.

En ProductoResource añadir el siguiente campo, para poder acceder directamente a todas las reseñas que ese producto tenga.

En la siguiente captura, nos muestra el enlace que debemos seguir para visualizar todas las reseñas de ese producto en específico.

Añadir también el campo clasificación.

Pero si algún producto no cuenta con alguna reseña, no tiene clasificación, entonces es importante aclarar esto, con un operador de condición.

Añadir el campo inventario, seguidamente con el operador de condición, si ese producto no cuenta con stock.

Añadir el campo precioTotal para que realice el total a pagar con descuento.

Ahora bien, en ProductoCollection, se deben añadir los siguientes campos en la función toArray.

Este recurso ProductoCollection, es usada para hacer listado de todos los productos, es por ello que, se debe utilizar en el método index del controlador del Producto.

Ahora realizaremos lo mismo para Resenia, pero esta vez solo crearemos un recurso de tipo recurso.

Se añaden los siguientes campos, en el archivo ReseniaResource en la función toArray.

En este caso, para el producto especificado, devolverá la siguiente información.

 

A partir de ahora, empezaremos a usar Postman, si aún no sabes cómo utilizarlo puedes hacerte una idea con la siguiente guía.