Help us understand the problem. What is going on with this article?

Laravel ルーティングファイルは増やしていい

Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう (4) 認証API | Hypertext Candy
https://www.hypertextcandy.com/vue-laravel-tutorial-authentication

これの間違い。
routes/api.phpをwebミドルウェアで使うためにRouteServiceProviderを変更してるけどこれはやめたほうがいい。
フレームワークはルールなので普通と違うことをするならそれなりに理由が必要。
例えば後から何も知らない人が参加して気付けるか?と考えると難しい。それどころか変更した本人でさえ数ヶ月後には忘れる。

ではどうすればいいのか。(web.phpに書けば終わるけど他の方法)
RouteServiceProvider::map()の// このたった2文字がヒントだけどルーティングファイルは好きなように増やしてカスタマイズしろってこと。

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapWebRoutes();

        $this->mapApiRoutes();

        //
    }

routes/にファイルを作ってRouteServiceProviderで読み込む。
今回なら内部用のAPIをwebミドルウェアで使うのでroutes/internal_api.phpとでもする。中身の書き方はapi.phpと同じ。

RouteServiceProviderは

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapWebRoutes();

        $this->mapApiRoutes();

        $this->mapInternalApiRoutes();

        //
    }

    protected function mapInternalApiRoutes()
    {
        Route::prefix('api')
             ->middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/internal_api.php'));
    }

何も知らない人が見た場合。
RouteServiceProviderの変更には気付かなくても問題ない。
routes/は絶対に見るので見慣れないファイルがあれば必ず気付く。
webミドルウェアなことなどはroutes/internal_api.phpのコメントにでも書いておけばいい。

将来的に外部用のAPIを作るようになってもroutes/api.phpを普通に使える。
webミドルウェアに変えてたら面倒なことになる。

web.phpかapi.phpかは認証方法で分ける

たぶん一番大元の間違いは「json返すものがAPI」という思い込み。
APIだからapi.phpに書く→apiミドルウェアが適用されてなにもかも間違った方向に。

Laravelのweb/apiはroutes、app/Http/Kernelのミドルウェア、config/auth.phpのguardsと色々出てくるけど偶然同じなのではなく全部セットと考える。
routesを最初と考えると間違える。完全に逆で認証から考える。

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

一番普通なブラウザでログインしてるのはSessionGuard
→webガード
→セッション使うのでwebミドルウェア
→web.php
認証の指定はauth。省略してるだけなので正確にはauth:web

APIはTokenGuard(デフォルトなのにドキュメントには何も書かれてない)
→apiガード
→セッションは使わないのでapiミドルウェア
→api.php
認証の指定はauth:api
Passportなどを使う場合でも同じ。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away