はじめに
web.php
・api.php
2つのルーティングファイルが存在していることを知りました。わざわざ別で定義する理由がわからなかったため調べてみました。
違いは何?
2つの違いをいくつかの観点からみていきます。
web.php
について
用途
・ブラウザでアクセスするウェブページのルートを定義するのに適している
特徴
・セッション管理とCSRF保護が有効になっており、ステートフルな通信に適している
ユースケース
・ログインページ、ユーザー登録ページ、ダッシュボードなどに使われる
api.php
について
用途
・外部からの HTTP リクエストを受けて値を返却する場合に使用
特徴
・セッション管理とCSRF保護が無効であり、ステートレスな通信に適している
ユースケース
・フロントエンドアプリケーション(SPAなど)からのAPIリクエストを処理など
CSRFとは
CSRFは、サイバー攻撃のこと。Webアプリケーションの脆弱性を利用し、ユーザーが意図しない形で処理を実行する攻撃。
ステートフルとステートレス
ネットワークにおける「ステートフル」と「ステートレス」とは、通信セッションの状態管理に関する概念である。
ステートフルとは
「記憶力のあるコンピューター」のようなもの。話したことを覚えていて次に話すときにその情報を使う。
例:オンラインショップの、カートのように記憶してくれている
ステートレスとは
「記憶力のないコンピューター」のようなもの。話をしたことを覚えていない。
例:自動販売機のようにジュースを買うたびにおかねを入れて選ぶ必要がある
Laravel 11では存在しなくなった
現時点(2024/08/19)における、最新バージョンのLaravel11では、最初から存在しないみたいですね。
ドキュメントをみてみたら以下のコマンドで追加できることがわかりました。
$ php artisan install:api
おわりに
ファイル名 | セッション管理 | CSRF保護 | ステートフル | ステートレス |
---|---|---|---|---|
web.php | ⚪ | ⚪︎ | ⚪︎ | × |
api.php | × | × | × | ⚪︎ |
web.php
は、ブラウザからのリクエストを扱い、セッションやクッキーを利用するルートに向いています。
一方で、api.php
は、APIリクエストを扱い、ステートレスなリクエスト処理に向いています。
それぞれの特徴を活かして使い分けていきましょう