Cuando creamos una API en Laravel queremos que nuestra aplicación solo sea accedida mediante peticiones HTTP con formato JSON.
Una de las tantas vias que existe es el manejo de excepciones mediante el fichero Handler de nuestro proyecto de Laravel.Tiene un método register(), donde cambiaremos par de lineas de como viene por default cuando se crea la aplicación laravel.
Pero esta vía no creo que sea la más completa para tratar todos los posibles errores o excepciones, pero funciona.
Ahora le quiero mostrar otra opción y es mediante la creación de un middleware que nos va a evualar las peticiones HTTP,pero lo configuraremos de manera global para que todas las peticiones que se realicen hacia nuestra API cumplan con los requisistos establecidos.
En la imagen de abajo se observa el código del middleware y la configuración que he usado para hacerlo de manera global.
class JsonMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (!$request->wantsJson())
{
return response()->json([
'success'=> 'false',
'message' => 'Do not have authorization'
], 404);
}
return $next($request);
}
}
Aqui vamos analizar que las peticiones que se hagan, sino vienen en formato JSON devolveran una respuesta. Para eso nos apoyamos en el metodo wantsJson que devuelve un valor booleano si el request no viene en formato requerido.
Aquí las imagenes de los resultados tanto de un navegador como del cliente HTTP Postman, de las peticiones hechas después de haber configurado nuestro middleware de manera global. Las mismas no cumplen con los requisitos y nuestra API retorna una respuesta con el error.
Top comments (2)
Una sugerencia el código de error 404 indica que el recurso no existe, en el middleware sería conveniente establecer 403 para que se conozca que el servidor ha entendido la solicitud pero no ha sido autorizada, saludos cordiales.
Si gracias haré el cambio.Igual tengo que actualizar el post por métodos que son más preciso para este caso