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

Aportes 25

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

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

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

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); ```
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; } ```

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.

php artisan r:l --name=posts

Pienso que el curso es muy cortito…

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

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

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

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

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