【Laravel】InertiaとAPIとを共存させる
こんにちは、フリーランスエンジニアの太田雅昭です。
Inertia
InertiaはLaravelで使える機能で、サーバーサイドとクライアントサイドとの結合を密にすることができます。具体的には、データを直接Reactなどのコンポーネントに渡せます。フックも使えるため、かなり便利ではあります。
ただデメリットもあります。APIとして使おうとした時に、標準でHTMLが出力されてしまうために、APIルートを別途用意しなければいけません。これがどうも受け入れられなかったため、すったもんだした挙句下記の方法を思いつきました。
APIと共存させる
APIとして使用する場合は、ヘッダーでJSONをリクエストするように設定します。
headers:{accept:'application/json'}
axiosなど使用するクライアントでの初期設定に、上記ヘッダーを指定します。
次にLaravelではコントローラーで以下のようにします。
public function index(Request $request)
{
$data = ...
return $request->expectsJson()
? $data
: Inertia::render(
'Xxx/Yyy',
$data,
);
}
InertiaとAPIでエンドポイントを共有化できました。こうすることで、コードの大幅な削減が実現できます。