No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de API REST con Laravel

Curso de API REST con Laravel

Profesor Italo Morales F

Profesor Italo Morales F

Versión 1: planificación y configuración inicial

7/18
Recursos

¿Cómo crear una API básica en Laravel?

Crear una API en Laravel puede parecer un desafío, pero con el enfoque correcto, puedes configurarla y usarla de manera efectiva. Una API o interfaz de programación de aplicaciones, nos permite comunicar diferentes sistemas de forma eficiente. Aquí desgranamos los pasos para iniciar con una API simple en Laravel, centrándonos en la planificación, creación de controladores y configuración de rutas.

¿Qué es importante al planificar tu API?

La planificación es crucial para el éxito de una API. Existen varias consideraciones importantes:

  • Decidir el versionamiento. Por ejemplo, comenzar con la versión 'V1' para facilitar futuras ampliaciones.
  • Clarificar los recursos y colecciones necesarios. Un recurso puede ser una sola entrada en la base de datos, como un post, mientras que una colección abarca varios de estos recursos.
  • Configurar archivos para permitir la devolución de uno o varios elementos según sea necesario.

Planificar bien no solo optimiza el tiempo de desarrollo, sino también la eficiencia en el consumo de recursos y la facilidad de uso.

¿Cómo crear un controlador en Laravel?

Para avanzar, crearemos un controlador en Laravel. Sigue estos pasos usando la terminal:

  1. Abre una nueva terminal.

  2. Usa el comando de Artisan para crear un controlador:

    php artisan make:controller API/V1/PostController --api
    

    Este comando crea una estructura de carpetas API/V1 y un controlador llamado PostController.

  • Importancia de --api: Este parámetro crea el controlador con cinco métodos predeterminados (index, store, show, update, destroy) necesarios para operar sin formularios, ya que la interfaz la proporcionará el dispositivo o software externo conectado.

¿Cómo configurar las rutas de la API?

Una vez creado el controlador, el siguiente paso es configurar las rutas en routes/api.php.

  • Registrar rutas:

    Escribe el siguiente código para definir cómo se accede a través de HTTP a los métodos del controlador:

    use App\Http\Controllers\API\V1\PostController;
    
    Route::apiResource('v1/posts', PostController::class)->only(['show']);
    

Estos pasos registran las rutas necesarias y especifican que, para esta configuración inicial, solo está activo el método show.

¿Cómo probar la API?

Para probar si tu API está funcionando correctamente, puedes usar herramientas como Postman. Esto es lo que deberías hacer:

  1. Abre Postman.

  2. Configura una nueva petición GET a la dirección:

    http://api.test/v1/posts/1
    
  3. Envía la solicitud.

Si configuras todo correctamente, recibirás una respuesta JSON con los datos del post solicitado. Los detalles como ID, userID, title, y content confirman que la API está devolviendo información relevante.

Consejos prácticos

  • Versionamiento adecuado: El uso de rutas como v1/ es crucial para mantener un sistema escalable y manejable.
  • Uso de herramientas: Utilizar Postman o herramientas similares facilita la prueba de APIs sin la necesidad de crear un cliente desde cero.
  • Documentación y organización: Mantén una documentación correcta y un código bien organizado para facilitar futuras expansiones.

Crear una API en Laravel puede parecer complicado al inicio, pero con práctica y siguiendo pasos ordenados, podrás expandir tus conocimientos y construir interfaces robustas y eficientes. ¡Continúa aprendiendo y experimentando!

Aportes 27

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Les recomiendo mucho el Curso de Postman, es un excelente curso que les ayudará a complementar mucho este curso 👀
.
Postman está bien, y de hecho Postman te permite generar la documentación de tu API, sí, tal cual como en la documentación de cualquier API que hayas visto (eso lo aprendes en el curso), pero si quieres tener un vistazo rápido entonces puedes usar la terminal con curl:
.

curl http://tudominio/api/v1/posts

Así obtienes resultados más rápidos 😄

Personalmente, me gusta utilizar prefix, en las rutas, en caso de querer cambiarlo, solo se modifica una línea de código:

Route::prefix('v1')->group(function() {
    Route::apiResource('posts', App\Http\Controllers\Api\V1\PostController::class);
});

Versión 1: planificación y configuración inicial

En terminal ponemo lo siguiente paracrear esta seriee de carpetas

php artisan make:controller Api/V1/PostController --api --model=Post

ahora nos movemos al siguiente apartado:
app > Http > Controllers > Api > V1 > PosController.php

escribimos lo siguiente en el método show:

public function show(Post $post)
    {
        return $post;
    }

vamos a routes > api.php
queda de la siguiente manera:

<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::apiResource('v1/posts', App\Http\Controllers\Api\V1\PostController::class);

para ver el listado de los elementos que estamos creando, ponemos esto en consola:
y se deberian ver la lista de las rutas

php artisan route:list

ponemos lo siguiente en api.php para decirle que solo queremos trabajar con esta ruta de momento:

Route::apiResource('v1/posts', App\Http\Controllers\Api\V1\PostController::class)->only('show');

ahora en nuestra computadora abrimos el programa postman y vamos a testear :

http://127.0.0.1:8000/api/v1/posts/1

Laravel es increíble, en unas pocas líneas de código ya tenemos una API funcionando.

Insomnia es una buena alternativa a Postman
https://insomnia.rest/

El comando para listar las rutas, tambien se puede escribir asi:

php artisan route:list
php artisan r:l

Si alguien usa XAMPP o algo similar y no sabe como ver el json con la url, en la url debéis poner: localhost/api-rest/api/public/api/v1/posts/1
Y si queréis ver el json formateado para que sea más legible, os recomiendo este formateador online así no tendréis que descargar nada https://jsonformatter.curiousconcept.com/

http: //127.0.0.1:8000/api/v1/posts/1 para ver localmente por postman, es necesario descargar el Postman desktop

Les dejo en link para descargar Postman
https://www.postman.com/downloads/

Algunos comandos utilizados en la clase:

php artisan make:controller Api/V1/PostController --api --model=Post
php artisan route:list

A mi parecer, el mejor profesor de Laravel. Junto con Duilio son los mejores…

En mi caso fue necesario cambiar el parametro de la funcion show por el id para poder hacer la busqueda y retornarlo.  ```js public function show($id) { $post = Post::find($id); return $post; } ```

Para los que quieran tener en vez de Postman una extensión en Chrome les recomiendo Talend API Tester: https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm

para qel que este haciendo esto con laravel 11 y vea que no existe siquiera el api.php dentro del routes, pues crealo y sigueme a continuación:return Application::configure(basePath: dirname(\_\_DIR\_\_))    ->withRouting(        web: \_\_DIR\_\_ . '/../routes/web.php',        commands: \_\_DIR\_\_ . '/../routes/console.php',        health: '/up',        then: function () {            Route::prefix('api/V1')                ->group(base\_path('routes/api.php'));        }    ) puse el prefijo de api/V1 para no tener que ponerlo en cada ruta. vamos a **bootsrap->app.php** y completamos con nuestra ruta: ```js return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__ . '/../routes/web.php', commands: __DIR__ . '/../routes/console.php', health: '/up', then: function () { Route::prefix('api/V1') ->group(base_path('routes/api.php')); } ) ``` *\*/*Route::apiResource("posts", PostController::class); Basicamente lo que pasa es que primero se declaran todas las rutas por defecto y THEN(entonces) podemos declarar las nuestras. El prefix se utiliza para agregarlo a toda ruta perteneciente al grupo y asi no tener que repetirlo cada vez que se vaya a crear una ruta distinta. Dentro de el group hay una funcion que llama a el base\_path(ruta base), y es basicamente eso, la ruta donde estamos definiendo todas nuestras demas rutas, en nuestro caso en routes/api.php. Lo demas es configurar las rutas hijas, es decir, las que van dentro de el archivo routes/api.php y hasta el momento solo se ha declarado un apiResource que basicamente llama a 5 rutas distintas de un CRUD pero dejo el ejemplo por si no queda muy claro. ```js use App\Http\Controllers\Api\V1\PostController; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- -------------------------------- ; */ Route::apiResource("posts", PostController::class); ```

Yo uso Thunder Client, que es una extension de VSCode

Para los que estén usando xampp con el puerto 80 por defecto deberán colocar en la url de postman el siguiente endpoint para visualizar el json: “localhost/api/public/api/v1/posts/1”

Usando el comando curl:

curl http://api-rest-laravel.test/api/v1/posts/1 | jq

Rest Client VS Code

Es una extensión para hacer peticiones http dentro de VSCODE y no tener que abandonar el IDE funciona muy bien

Chicos/as! No olviden personalizar los mensajes de error que devuelve Laravel ya que por defecto se muestra un HTML.
Esto lo corrigen ingresando a la pestaña Headers de Postman e ingresando la key => Accept y el value => application/json.
Notarán la diferencia.

En caso que no les cargue las rutas de api, tendran que agregar manualmente una linea en bootstrap/app.php ![](https://static.platzi.com/media/user_upload/image-66bd15f1-b63b-4755-ba1b-2caf331c12a3.jpg)
Para los que estamos utilizando la versión 11 de Laravel necesitan ejecutar el comando: `php artisan install:api` Ya que el archivo api.php no viene por defecto en esta versión. <https://laravel.com/docs/11.x/routing#api-routes>

Preferiria usar prefix para definir el V1…porque esto no deberia formar parte del endpoint.

Pienso que el curso es muy cortito…

Al principio, al ejecutar `php artisan route:list` no me aparecía la ruta de la API, tuve que añadir una línea en el archivo bootstrap/app.php ya que estoy trabajando con la versión 11 de Laravel, por si les llegase a pasar: ```js return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__ . '/../routes/web.php', api: __DIR__ . '/../routes/api.php', commands: __DIR__ . '/../routes/console.php', health: '/up', ) ```La línea que se agrega es `api: __DIR__ . '/../routes/api.php',` para que Laravel cargue el archivo de rutas api.php
php artisan r:l --name=posts

Otra alternativa a Postman es la extensión para Chrome y Firefox llamado “RESTED”

Esto iria en api.php

use App\Http\Controllers\Api\V1\PostController;
Route::get(’/v1/posts’, [PostController::class,‘index’]); //muestra todos los registros

si quieren que crear su propio dominio virtual asi como en el video, pueden ingresar a ese post :
https://codersfree.com/blog/como-generar-un-dominio-local-en-windows-xampp

¡Genial!
.
Postman es una herramienta muy útil para el desarrollo.