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:
Abre una nueva terminal.
Usa el comando de Artisan para crear un controlador:
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:
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:
Abre Postman.
Configura una nueva petición GET a la dirección:
http://api.test/v1/posts/1
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!
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 :D
gracias :D
Excelente, veo que también se pueden aplicar otros métodos a CURL aunque ya no es tán rápido.
Ejemplos de curl
Personalmente, me gusta utilizar prefix, en las rutas, en caso de querer cambiarlo, solo se modifica una línea de código:
ahora nos movemos al siguiente apartado:
app > Http > Controllers > Api > V1 > PosController.php
escribimos lo siguiente en el método show:
publicfunctionshow(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:
ahora en nuestra computadora abrimos el programa postman y vamos a testear :
http://127.0.0.1:8000/api/v1/posts/1
Gracias!
Laravel es increíble, en unas pocas líneas de código ya tenemos una API funcionando.
exacto
Insomnia es una buena alternativa a Postman
El comando para listar las rutas, tambien se puede escribir asi:
php artisan route:list
php artisan r:l
Buen aporte!
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/
Gracias.
http: //127.0.0.1:8000/api/v1/posts/1 para ver localmente por postman, es necesario descargar el Postman desktop
En caso que no les cargue las rutas de api, tendran que agregar manualmente una linea en bootstrap/app.php
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.
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:
**/*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.
use App\Http\Controllers\Api\V1\PostController;use Illuminate\Http\Request;use Illuminate\Support\Facades\Route;/*
|--------------------------------------------------------------------------
| API Routes
|-------------------------------------------------------------------------- -------------------------------- ;
*/Route::apiResource("posts",PostController::class);
Gracias crack
En la documentación de Laravel Routing - Laravel 11.x - The PHP Framework For Web Artisans encontré otra solución, donde se puede ejecutar el comando
php artisan install:api
```Lo que crea el archivo api.php y configura el archivo bootstrap/app.php
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:
returnApplication::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
En Laravel 11, es necesario configurar explícitamente el archivo de rutas api.php en el archivo bootstrap/app.php. Esto se debe a que, por defecto, Laravel 11 no carga automáticamente este archivo de rutas para las API.
Hola, tuve un inconveniente usando laravel 9.
segui los pasos con exactitud, pero al crear el metodo GET|HEAD api/v1/amonguspost/{amonguspost} ................. amonguspost.show
con la sintaxis
uf, excelente mi hermano
Me ha salvado de un gran reproceso.
Genial dato.
A alguien más le sale la ruta: sanctum/csrf-cookie ?
¡Hola! ¿Te da algún error la ruta? Recuerda que Laravel se actualiza constantemente, por lo que puede que hayan agregado esa ruta para hacer validaciones de tokens CSRF :D
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"