LoginSignup
21
10

Laravel API 例外発生時のHTTP ResponseをJson Responseにする

Last updated at Posted at 2022-05-04

Laravelで正常時にJsonレスポンスを返していても、例外時はHTTPレスポンスを返す場合があります。
HTTPヘッダーにAccept: application/json が指定されてないとHTTPレスポンスが返ってきます。

フロント側でHTTPヘッダーを追加して送ってもらうのも正しいですが、指定がないとHTTPレスポンスが返るのもAPIサーバーとしては謎な挙動なので常にJsonレスポンスを返すためにミドルウェアを作ります。

環境

  • PHP: 8.1.5
  • Laravel: 9.9.0

手順

$ php artisan make:middleware ForceJsonResponse
app/Http/Middleware/ForceJsonResponse.php
<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

final class ForceJsonResponse
{
    /**
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next): mixed
    {
        $request->headers->set('Accept', 'application/json');

        return $next($request);
    }
}

app/Http/Kernel.phpForceJsonResponseミドルウェアを追加します。

app/Http/Kernel.php
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\ForceJsonResponse::class, // 追加
    ];
21
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
10