Carlos Eduardo Gomez García
IRIDIAN GUADALUPE CARRERA MONDRAGÓN
José Tuzinkievicz
¿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:
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:
php artisan make:controller API/V1/PostController --api
Este comando crea una estructura de carpetas API/V1 y un controlador llamado PostController.
--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:
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
v1/ es crucial para mantener un sistema escalable y manejable.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!
Carlos Eduardo Gomez García
IRIDIAN GUADALUPE CARRERA MONDRAGÓN
José Tuzinkievicz
Luis Alberto Ruiz Sarmiento
IRIDIAN GUADALUPE CARRERA MONDRAGÓN
Mariano Gastón Paduani
Jimmy Buriticá Londoño
Omar Villafuerte
Edward Espinoza
Mariano Gastón Paduani
Angelplus Soluciones Tecnológicas
Alexis Sanchez Leal
Julian David Alzate Cuervo
Alex Maldonado
Francisco Hernandez
Mariano Gastón Paduani
Santiago Velásquez Serna
Angel Javier Sanchez Tenjo
Luis Eduardo Sandrea Pacheco
Mariano Gastón Paduani
Jose Luis Junior Perez Gil
Eduardo Miguel Ruiz
Mario Zamora
Santiago Velásquez Serna
Gilber Alzate
Brayan Jiménez
Aramis Garcia Guerrero
Angel Javier Sanchez Tenjo
Iván Céspedes
Luis Humberto Osorio Quiceno
Jose Luis Herrera Rodriguez
Carlos Eduardo Gomez García
Jesús Cabrera
Rodrigo Abdón Quisbert Fernández
Tony Manuel Ojeda Vela
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:
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
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
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...
Comparto totalmente!
En mi caso fue necesario cambiar el parametro de la funcion show por el id para poder hacer la busqueda y retornarlo.
public function show($id) { $post = Post::find($id); return $post; }
Esto se debe a que, cuando usas una ruta como api/v1/posts/{id}, el valor de {id} se pasa como un parámetro a la función del controlador.
Por lo tanto, el método show debe modificarse de la siguiente manera para buscar y retornar el post correspondiente:
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
Muchas gracias!
gracias :)
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:
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.
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:
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
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
/** * Display the specified resource. * * @param \App\Models\AmongusPost $amongusPost * @return \Illuminate\Http\Response */ public function show(AmongusPost $amongusPost) { $amonguspost = new AmongusPost ; // Retornar simple return $amongusPost; }
No me retornava ningun valor
Para seguir el curso lo solucione de esta manera momentaneamente para luego profundizar mi falla
/** * Display the specified resource. * * @param \App\Models\AmongusPost $amongusPost * @return \Illuminate\Http\Response */ public function show( $amongusPost) { $amonguspost = new AmongusPost ; // //Retornar simple return $amonguspost->find($amongusPost) ; }
El objeto "AmongusPost" me devolvio estas propiedades
object(App\Models\AmongusPost)#1215 (30) { [ "connection":protected ]=> NULL [ "table":protected ]=> NULL [ "primaryKey":protected ]=> string(2) "id" [ "keyType":protected ]=> string(3) "int" [ "incrementing" ]=> bool(true) [ "with":protected ]=> array(0) {} [ "withCount":protected ]=> array(0) {} [ "preventsLazyLoading" ]=> bool(false) [ "perPage":protected ]=> int(15) [ "exists" ]=> bool(false) [ "wasRecentlyCreated" ]=> bool(false) [ "escapeWhenCastingToString":protected ]=> bool(false) [ "attributes":protected ]=> array(0) {} [ "original":protected ]=> array(0) {} [ "changes":protected ]=> array(0) {} [ "casts":protected ]=> array(0) {} [ "classCastCache":protected ]=> array(0) {} [ "attributeCastCache":protected ]=> array(0) {} [ "dates":protected ]=> array(0) {} [ "dateFormat":protected ]=> NULL [ "appends":protected ]=> array(0) {} [ "dispatchesEvents":protected ]=> array(0) {} [ "observables":protected ]=> array(0) {} [ "relations":protected ]=> array(0) {} [ "touches":protected ]=> array(0) {} [ "timestamps" ]=> bool(true) [ "hidden":protected ]=> array(0) {} [ "visible":protected ]=> array(0) {} [ "fillable":protected ]=> array(0) {} [ "guarded":protected ]=> array(1) { [ 0 ]=> string(1) "*" } }
Saludos!!!
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"
Usando el comando curl:
curl http://api-rest-laravel.test/api/v1/posts/1 | jq