😊

【Laravel超入門】web.php と api.php の違いとは??

に公開

Laravel を使い始めると、最初に出てくる疑問のひとつがこれ。

Q1. そもそも web.php と api.php って何?

A:
Laravel では「ルーティング」という仕組みで、URLと処理(コントローラやビュー)を結びつけています。
routes/ フォルダの中には、代表的にこの2つのルートファイルがあります。
web.php → ブラウザで見る普通のWebページ用
api.php → JSONデータを返すAPI用

ざっくり言うと、


Q2. どっちに書いても動くけど、違いはあるの?

A:あります!
実はこの2つ、**裏で自動的に違うミドルウェア(設定のようなもの)**が適用されています。

ファイル 主な特徴 自動で適用されるミドルウェア
web.php セッション、CSRF保護あり。HTMLを返す。 web ミドルウェアグループ
api.php セッションなし。JSONを返す。 api ミドルウェアグループ

つまり、

  • web.php:ログイン状態を覚えたり、フォーム送信を守ったりする仕組み付き
  • api.php:セッションなしで、トークン認証などを想定したシンプル構成

Q3. それぞれどんなときに使うの?

A:用途が違います。
✅ web.php に書くルート
・普通のWebページ(例:/home や /contact)
・Bladeテンプレートを表示するページ
・フォーム送信(CSRF保護が必要な場合)
・リダイレクト処理など

✅ api.php に書くルート
・JSONデータを返すAPI
(例:/api/users や /api/posts)
・Vue.jsやReactなどのSPA(フロント)から呼び出されるデータ取得用
・外部サービスとの通信
・トークン認証で使うエンドポイント


Q4. 実際のコード例を見たい!

🧩 web.php の例

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome'); // Bladeテンプレートを返す
});

Route::post('/contact', [ContactController::class, 'submit']);

ブラウザからフォームを送ったり、画面を表示したりする処理はここ!

🧩 api.php の例

use Illuminate\Support\Facades\Route;

Route::get('/users', [UserController::class, 'index']); // JSONを返す
Route::post('/login', [AuthController::class, 'login']);

Vue.jsなどのフロントから axios.get('/api/users') のように呼び出す想定です。
Laravelが自動的に「/api」というプレフィックスを付けてくれます。


Q5. Vue.js + Laravel の構成だとどう使い分けるの?

A:こんな感じで分けるのが一般的です。

目的 書く場所 内容
初期HTMLを返す(Vueアプリの土台) web.php return view('app')
Vue側でデータを取得するAPI api.php JSONでデータ返す
ログイン・ログアウト(セッション利用) web.php LaravelのAuth関連
フロントから呼び出すCRUD API api.php GET/POST/PUT/DELETE

Q6. 間違えて逆に書いちゃったらどうなるの?

A:動くこともあるけど、トラブルのもとです。

例えば:

  • APIを web.php に書くと → CSRFエラーになる場合がある
  • フォーム送信を api.php に書くと → セッションが使えずログイン状態が維持できない
    なので、「HTMLはweb.php、JSONはapi.php」と覚えるのが安全です。

まとめ

比較項目 web.php api.php
主な用途 通常のWebページ JSONを返すAPI
ミドルウェア web api
CSRF保護 あり なし
セッション あり なし(ステートレス)
URLプレフィックス なし /api
主な利用先 ブラウザ モバイルアプリ・SPA

「API」と聞くと難しそうですが、要するに「データを返すだけのルート」のこと。
まずは web.php でWebページを作り、
後から api.php にデータ取得用のルートを増やしていくのがオススメです!

Discussion