En este tutorial, crearemos una api json crud completa utilizando Laravel y la nueva función de recursos de la API de Eloquent. Este enfoque se usa cuando desea construir todo el back-end de su aplicación usando Laravel, mientras deja el front-end a Vue, React o Angular. Al utilizar Laravel y Eloquent API Resources, puede formatear sus respuestas de datos como desee y al mismo tiempo agregar metainformación, enlaces e información de paginación, envoltura de datos personalizados, atributos condicionales y relaciones.


Entorno de desarrollo local

Aquí acabamos de configurar un nuevo proyecto llamado lpgvuepara comenzar. ¿Por qué ese nombre? Es la abreviatura de Laravel Play Ground / Vue. Básicamente, solo queremos tener un entorno de desarrollo local que nos permita configurar la última y mejor versión de Lavavel para que podamos construir y modificar como queramos.

composer global require laravel / installer
composer create-project –prefer-dist laravel / laravel lpgvue
composer require –dev barryvdh / laravel-ide-helper
php artisan ide-helper: generate

Con los comandos anteriores, ahora tenemos un proyecto Laravel fresco y agradable para trabajar.


Crear datos para trabajar

Laravel hace que sea realmente fácil crear tablas para almacenar datos de muestra para trabajar. Además de las migraciones, puede configurar la inicialización de la base de datos para llenar rápidamente esas tablas con datos para que pueda probar su API.


Agregar una base de datos

Primero agregamos una base de datos a nuestro servidor usando una herramienta de interfaz gráfica de usuario. Consulte la configuración de su base de datos para Laravel para obtener más información.
crear una base de datos en Homestead

Estamos utilizando Homestead, por supuesto, el Vagrant Box de primera calidad disponible para entornos de desarrollo local. Eso significa que nuestro nombre de usuario y contraseña son homestead y secretos respectivamente. Sin embargo, necesitamos especificar la base de datos que acabamos de crear en el archivo env.
establecer credenciales env mysql


Agregar una migración

Podemos usar Artisan para generar una migración que proporcionará el esquema para una tabla de publicaciones que contendrá nuestras publicaciones.

php artisan make: migración create_posts_table –create = posts

En las líneas resaltadas a continuación, agregamos campos para titlebodyde las publicaciones.
base de datos / migraciones / xxxx_xx_xx_xxxxxx_create_posts_table.php


Semilla de base de datos

Para habilitar la siembra de bases de datos, podemos usar Artisan nuevamente para crear una clase de sembradora para nosotros.

php artisan make: seeder PostsTableSeeder

El código que agregamos a continuación especifica hacer 25 publicaciones de muestra en la base de datos.
base de datos / semillas / PostsTableSeeder.php

También necesitamos actualizar el archivo DatabaseSeeder.php para ahora hacer uso de la clase PostsTableSeeder.
base de datos / semillas / DatabaseSeeder.php

php artisan make: factory PostFactory

Finalmente, necesitamos una Fábrica que nos permita especificar la forma de los datos que poblarán la base de datos. Queremos que el título utilice 40 caracteres y el cuerpo 200 caracteres. Para configurar algo como esto, simplemente siga estos pasos.

base de datos / fábricas / PostFactory.php


Crear un modelo de datos

La aplicación también necesitará un modelo para la tabla de publicaciones. Podríamos haber hecho el modelo y la migración de una sola vez, pero este enfoque también funcionará.

php artisan make: modelo Post

Con eso, toda la configuración de datos está completa. Ahora, queremos migrar la base de datos y luego sembrar la base de datos. ¡Aquí vamos!

php artisan migrate
php artisan db: semilla

Debería ver mensajes sobre las migraciones que se ejecutan correctamente y la inicialización de la base de datos se completa correctamente. Ahora, cuando se visualiza la base de datos con una herramienta GUI, todos los datos de muestra ahora se completan.

siembra de base de datos laravel


Controladores y rutas de edificios

¡Ahora podemos comenzar a construir el código y los archivos reales que impulsarán la API REST! Primero, necesitamos un controlador Post basado en recursos. Artisan lo hace fácil.


Crear un controlador

php artisan make: controller PostController –resource

El archivo resultante está a continuación con los comentarios y un par de métodos eliminados. Para nuestro pequeño tutorial usaremos index (), store (), show () y destroy ().
aplicación / Http / Controllers / PostController.php


Configurar el archivo de rutas

Laravel te da dos puntos de entrada para rutas. Uno es para solicitudes web estándar y el otro está diseñado para solicitudes de API. Estamos creando una API aquí, por lo que necesitamos completar nuestras rutas en el archivo api.php. El código está a continuación con comentarios que explican el propósito de cada ruta.

rutas / api.php

Observe que hay dos rutas que apuntan al mismo método store (). Esto se debe a que el método store () puede actualizar una publicación cuando se usa el verbo http PUT o crear una nueva publicación cuando se usa el verbo http POST. Cosas bastante interesantes.


Crear un recurso de API

Ahora podemos empezar a trabajar con recursos API en Laravel. La documentación describe esta característica como un tipo de capa de transformación que vive entre la capa del modelo de datos y la capa de respuesta JSON. Podemos seguir adelante y crear un nuevo recurso API como ese.

php artisan make: publicación de recursos

El comando anterior crea una nueva carpeta de Recursos y llena el siguiente archivo.

aplicación / Http / Resources / Post.php

Este archivo es su tipo de Transformer que le permite personalizar los datos de respuesta JSON de su api de varias maneras. Podemos ponerlo en práctica ahora.

Ahora podemos visitar http://lpgvue.io/api/postsen el navegador y ver la salida JSON bien formateada. Los datos están muy bien contenidos en la propiedad de datos, junto con enlaces para paginación y metainformación. ¡Muy genial!


Personalización de los datos devueltos

El recurso generado que creamos anteriormente se puede personalizar para que pueda devolver exactamente lo que le gusta de la API. Al modificar la declaración de devolución como lo hacemos a continuación, ahora solo se envían la identificación, el título y el cuerpo, lo que limpia las cosas con solo un toque.

aplicación / Http / Resources / Post.php

Aquí está la salida resultante al visitar http://lpgvue.io/api/posts


Asignación de campo de base de datos a respuesta de API

Esta característica del recurso API de Laravel es realmente genial. Los campos de su base de datos no tienen que coincidir exactamente con las claves utilizadas en las respuestas JSON. Por supuesto, probablemente sea mejor si lo hacen por la cordura de todos. Sin embargo, si necesita utilizar propiedades personalizadas en los datos de respuesta, puede hacerlo. Veamos cómo funciona.

aplicación / Http / Resources / Post.php

La respuesta JSON de la API ahora usa esas propiedades personalizadas.


Devolver un solo recurso

Ahora veamos cómo devolver un solo recurso en el método show () de nuestro controlador.
aplicación / Http / Controllers / PostController.php

Este es el resultado resultante al visitar http://lpgvue.io/api/post/5


Agregar datos adicionales

Para agregar algunos datos adicionales a las respuestas enviadas, como la versión api y otras cosas, puede configurar el método with () como lo hacemos aquí.
aplicación / Http / Resources / Post.php

Al visitar http://lpgvue.io/api/post/5, ahora vemos esos metadatos adicionales en la respuesta. Entonces, podemos ver que esta es una forma realmente poderosa de personalizar exactamente lo que desea que produzca la API.


Crear y actualizar

El mismo punto final se puede usar para actualizar una publicación o crear una nueva por completo. La única diferencia es el verbo HTTP que se utiliza al realizar la solicitud. Si se utiliza una solicitud PUT, se supone que se actualizará una publicación. Si se utiliza una solicitud POST, eso significa que se está creando una nueva publicación. El código aquí permite una actualización de Post o una creación de Post usando el mismo método store () en PostController.