Manejar Excepciones¶
Estamos ante otro de los grandes cambios de Laravel 11, y es que con respecto versiones anteriores, se han fusionado muchos ficheros en bootstrap\app.php
. Para manejar las excepciones, debemos siempre de capturarla y devolver una vista o un JSON.
Es por esto, que debemos hacer uso de la función render()
de la clase Exceptions
. El problema es que debemos saber si viene de la API o no, para lo que necesitamos hacer uso de $request
.
Gracias a $request
podemos saber si esperamos un JSON o no.
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function(NotFoundHttpException $e, $request){
if($request->expectsJson()){
return response()->json('Not found',404);
}
});
})->create();
De este modo, si hay una excepción del tipo NotFoundHttpException, y se espera un JSON, devolverá un JSON con el mensaje Not Found y un 404 en lugar del error. Si no lo espera, el sistema lo gestionará dando el 404 habitual.
Siguiendo estas pautas, estaremos construyendo una API robusta y sobre las que tendremos control en cualquier momento de lo que pasa.
Actividades¶
-
AC 813. (RA7 / CE7e CE7f CE7g CE7h / IC1 / 3p) - Adapta el proyecto de la lista de tareas al manejo de excepciones. Documéntalo.
-
PR 814. (RA7 / CE7e CE7f CE7g CE7h / IC2 / 5p) - Ya que las pruebas han ido bien, tu CTO te solicita que lo prepares todo para el manejo de excepciones. También te pide que lo documentes.
-
RE 815. (RA7 / CE7a CE7b CE7c CE7d CE7e CE7f CE7g CE7h / IC2 / 10p) - Esta fase se desarrolla la lógica principal de la API. El objetivo es ampliar las funcionalidades básicas del sistema, integrando métodos personalizados y mejorando el control de errores.
Durante el desarrollo se deben tener en cuenta los siguientes aspectos:
- Se ha implementado al menos un método personalizado, como por ejemplo: obtener todas las publicaciones de un usuario específico o listar los comentarios de una publicación.
- Se han incorporado mecanismos para el manejo de excepciones con try/catch, y se devuelven respuestas claras y adecuadas a cada situación.
- Se utilizan códigos de estado HTTP correctos para indicar el resultado de cada operación (200, 201, 404, 500, etc.).
- Todos los endpoints desarrollados deben ser probados mediante Postman, y se recomienda documentar estos ensayos.
- El proyecto mantiene una estructura clara y organizada, favoreciendo la reutilización del código y la colaboración entre los miembros de la pareja.
Esta etapa consolida la funcionalidad del proyecto y representa el tramo más crítico del reto, en el que se demuestra el dominio técnico sobre Laravel y las buenas prácticas de diseño de APIs.