David Quezada
5 min readMay 8, 2018

API RESTful con Laravel 5.6 en menos de 1000 palabras.

Con frío en la sangre y Maruchan en el estómago. Me dieron ganas de mostrarles lo fácil que es crear una RESTful API usando Laravel 5.6.
La idea también es demostrar lo amigable que puede ser este framework para crear soluciones rápidas.

:inserte música de tutorial de youtube aquí:

Este tutorial sólo mostrará cómo crear un endpoint y una pequeña explicación de cómo usarlo con algunos verbos HTTP.
El crear un proyecto Laravel, migraciones y modelos lo veremos muuuy rápidamente, y crearemos sólo una tabla, muy sencilla, para no complicarnos con cosas que no vienen al caso, pero que quizás veamos en detalle más adelante en otro artículo.
Si ya tienes un proyecto corriendo en Laravel, te puedes saltar la siguiente seccion.

Requisitos:

  • PHP ≥7.1
  • Composer: Para instalar Laravel.
  • Una base de datos creada. En este tutorial usaré Mysql y la BD se llamará MARUCHAN.

El cómo manejen su base de datos se los dejo a ustedes. La mayoria de las operaciones las haremos con Laravel.

Instalando Composer:

¿De verdad creen que detallaré eso aquí? Para eso está el sitio oficial.

Instalando Laravel:

composer global require "laravel/installer”

(Acá se recomienda ir por un café o tecito, porque tarda un poco.)

Una vez esté lista la instalación podemos crear nuestro proyecto en Laravel \o/!

laravel new tutoApiRest

Sin entrar en mucho detalle, lo que hace el comando es crear una carpeta tutoApiRest, instalar las dependencias de Laravel dentro de esa carpeta, preparar el archivo .env (que usaremos para conectarnos a nuestra BD), y generar la application key para desarrollar en nuestra máquina.

Conectando a la Base de datos:

Esta parte es easy peasy. Lo único que debemos hacer es modificar el archivo .env que se encuentra en la raíz de nuestro proyecto tutoApiRest.

Lo llenaré con los datos de mi BD:

[...]DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=MARUCHAN
DB_USERNAME=BloodyLink
DB_PASSWORD=thanosdidnothingwrong
[...]

Migraciones:

Para no extendernos mucho, crearemos una tabla ultra sencilla llamada pokemon con los campos id y nombre.
La gracia de las migraciones es que puedes tener la base de datos dentro del control de versiones como git.

Con el terminal de tu elección, entramos a la carpeta raíz de nuestro proyecto y ejecutamos el siguiente comando:

$ php artisan make:migration create_table_pokemons
Created Migration: 2018_05_08_044418_create_table_pokemons

Revisemos lo que acaba de crearse:
La recién creada migración debería estar en database/migrations.

Junto con 2018_05_08_044418_create_table_pokemons.php, si estamos en un proyecto nuevo, deberían haber 2 migraciones más. Estas las crea Laravel por defecto para mantener usuarios. Las borraré en este caso ya que no las usaré, pero depende de ustedes.

Editamos nuestra recién creada migración de la siguiente forma:

Como dije más arriba, mantendremos la BD muy simple para enfocarnos sólo en la creación de la API.

Esta migración debería crear una tabla pokemons con las campos id, name, created_at y deleted_at. Los 2 últimas los maneja Laravel de forma automática.

Ejecutemos nuestra migración:

$ php artisan migrate
Migrating: 2018_05_08_044418_create_table_pokemons
Migrated: 2018_05_08_044418_create_table_pokemons

Debería estar la tabla ya creada en nuestra BD. Al revisar que todo salió bien, podemos comenzar a crear nuestro modelo, para poder modificar esta tabla.

Modelo:

$ php artisan make:model Pokemon
Model created successfully.

El modelo recién creado debería estar dentro de la carpeta App/.

Ya que el campo name es el único que vamos a modificar en este caso, lo agregamos al atributo $fillable de la clase Pokemons.

Nota: Para crear el modelo + la migración con un solo comando puedes usar:

php artisan make:model Pokemon -m

Al fin, estamos listos para crear el controller que tendrá los metodos a llamar por nuestra API. Vamos allá!

Creando el resource controller:

Uno de los talentos de Laravel, es que puede crear un controlador con métodos ya establecidos para una api, y tener listo todo para el uso de los verbos HTTP. Todo en 1 sencillo paso:

$ php artisan make:controller PokemonController -r
Controller created successfully.

El -r, significa que este controller se usará como recurso, y laravel deja los métodos listos para ser llenados. De no agregar -r, se creará un controller totalmente vacío, lo que nos daría más trabajo, y a nadie le gusta trabajar (?).

Veamos como nos quedó:

Ahora vamos a crear la ruta para acceder a nuestro recién creado controlador.

En Laravel, sólo debemos definir el nombre del endpoint, y el controlador.

Debemos abrir el archivo routes/api.php, el cual quizás ya tenga un middleware configurado para users por defecto, pero que ignoraremos.

Agregaremos la ruta de la siguiente forma:

¿Quedó bien?

Usemos el comando php artisan route:list, para ver si nuestras rutas quedaron bien configuradas:

Hermosura.

Laravel, en su infinita hermosura, configuró las rutas para los verbos http que queramos usar, como GET, POST, PUT, PATCH y DELETE. Si seguimos la estructura definida en esta lista, no hay por donde perderse.

Probemos…

Vamos a crear unos pokemons con unas peticiones POST, y luego pediremos un pokemon en específico usando GET. Esto sólo para que se entienda la idea.

Primero, para guardar datos, si nos fijamos en la lista de rutas, el verbo POST está asociado con api/pokemons, y con el método pokemons.store.

Segundo, para mostrar los datos, el método GET está asociado con api/pokemons/{pokemon}, y con el método pokemons.show.

Hagámosle caso a la ruta.

En PokemonController, importaré el archivo App\Pokemon para poder cambiar datos de este, y llenaremos los métodos store() y show().

Iniciemos nuestro server con el comando php artisan serve.

Ahora podemos usar nuestro método favorito para probar APIs. En mi caso usaré Postman.

Probemos el método store():

Siendo una petición POST, enviamos un JSON con la información que deseamos insertar en nuestra BD.

Probamos enviando mi primer Pokemon Lugia.
Nuestra API nos responde con un status: 200 OK.

Revisemos nuestra BD:

Good!

Ahora probemos el método show():

Postman solicitó con un método GET el pokemon con el id = 1 en nuestra BD, en este caso siendo Lugia.

Mission complete!

Ahora tu tarea es jugar con los demás verbos HTTP, y usando php artisan route:list como guía no deberías tener problemas.

Nota: No tengo relación alguna con Maruchan Inc. Sólo tenía hambre y no tenía ganas de hacer comida decente.

El repositorio con este proyecto de ejemplo está En este enlace de GitHub.

David Quezada

Chilean Software Developer :: Pizza con Piña hater :: Sopaipillas con pebre lover :: @bloodylink_