Comparte en Facebook Twitter Google+

Como hemos visto en lecciones anteriores Laravel nos provee una base bien estructurada para el desarrollo de APIs y gracias al uso del componente de rutas podemos definir recursos con los cuales podemos interactuar fácilmente desde cualquier otra aplicación.

La estructura de nuestro recurso “users” hasta ahora sería la siguiente:

Para comprobar esto, podemos ingresar a la consola y ejecutar:

route-list

Ahora vamos a crear una lista de usuarios usando model factory.

Al ingresar al archivo app/database/factories/ModelFactory.php  podrás ver que por defecto tenemos un Model Factory para la tabla usuarios, con el que podremos probar nuestra aplicación. Para ejecutarlo tienes que ir al archivo app/database/seeds/DatabaseSeeder.php  y agregar las siguientes líneas:

Es decir, vamos a crear 10 usuarios de prueba, ahora desde la consola ejecutamos:

Para probar que esto ha funcionado correctamente podemos ir al navegador e ingresar a la url laravel.app/user/1 (en mi caso es laravel.app, tu pudiste haber configurado el proyecto con otro dominio). El resultado será algo como esto:

Perfecto, entonces, para repasar un poco sobre que es lo que ocurre aquí, tenemos un recurso users que nos proporciona una url de tipo get para obtener los datos del usuario:

Por defecto Laravel devuelve este tipo de respuestas en formato JSON, por lo que en nuestro controlador sólo necesitamos este código para recibir el objeto JSON deseado:

Route Model Binding

Ahora veamos otra forma de obtener los datos del usuario pero usando Model Binding. En el archivo app/Providers/RouteServiceProvider.php tenemos una función llamada boot en donde podemos definir nuestros “Route Model Bindings” que sería como vincular o atar un modelo a una ruta, en nuestro caso, el modelo users.

Con esto estamos vinculando al recurso router el modelo  App\User.php

Lo que ocurre aquí es que desde ahora cuando tratemos de ingresar a la url anterior (laravel.app/user/1) la consulta no se hará desde el controlador, sino que se ejecutará al momento de recibir la petición y la vinculará al modelo usuario. Esto quiere decir que debemos alterar un poco el código de nuestro controlador.

Como puedes ver, en lugar de recibir el ID del usuario como parámetro del método show, ahora recibimos una instancia del modelo User. Si ingresas nuevamente a la url laravel.app/user/1 podrás obtener el mismo resultado

¡Genial! ahora vamos a ver que ocurre cuando un usuario no existe, digamos el usuario 23 (recuerda que sólo hemos creado 10 usuarios).

not-found

En este caso estamos recibiendo una excepción del tipo NotFoundHttpException para la cual no hemos definido un comportamiento. Entonces siguiendo lo aprendido en la lección anterior sobre API REST en Laravel 5.1 – Validaciones y Excepciones podemos devolver una respuesta personalizada a este error agregando las siguientes líneas al archivo app/Exceptions/Handler.php  dentro de la función render

Ahora nuevamente desde el navegador en laravel.app/user/23 obtendremos el siguiente resultado:

Puedes aplicar esta misma lógica para cualquiera de los modelos de tu aplicación, como puedes ver es una solución un poco más elegante que nos permite mantener una estructura limpia dentro de nuestro código.

Recuerda que puedes dejar tus dudas en la sección de comentarios, no olvides compartir el material en redes sociales.

Material relacionado

Regístrate hoy en Styde y continua mejorando tus habilidades: ver planes.

Lección anterior API REST en Laravel 5.1 - Validaciones y Excepciones Lección siguiente API REST en Laravel 5.1 - Peticiones JSON con Postman