Laravel ~sail artisan install:apiについて知りたい!
sail artisan install:api コマンドについて
APIを作成する際使用していたコマンドについて理解する
Laravel独学中のオオミヤです。
最近バックエンド開発でLaravelAPIを作成してます。
さあ、Laravel 11でも開発もしてみよう。
おやroutes/api.phpが無くなっている。
どうやらinstall:apiで作成できるようだ。
(コンソールに英語が流れる…)
ファイル一つ作成するには長いし、インストールやmigrateまで。
何をしているのか調べたら面白かったのでまとめてみました。
私と同じ初学者の方々の助けになれば幸いです。
なんぞや
sail artisan install:api コマンドは、
LaravelのAPI認証フローを簡単にセットアップするもの
具体的には、以下を行ってくれます。
- APIルート設定
- Sanctumのインストール
- personal_access_tokensテーブルの作成
それぞれもう少し気になります。
私のメモリ使用率はこれだけで危ないですが、掘り下げましょう。
各項目と、認証フローに分けて説明します。
セットアップ項目
APIルート設定
routes/api.php が作成され、APIエンドポイントの定義を行う準備ができます。
API関連のルートを記述することでHTTPリクエストのルーティングが管理されます。
routes/api.phpのルートはステートレスで、apiミドルウェアグループが指定されます。
さらに、/api URIプレフィックスがこれらのルートに自動的に適用されるのです。
Sanctumのインストール
Sanctumとは、APIトークン認証を簡単に導入できるパッケージ のことです。
これによって、トークンベースのAPI認証を実装します。
Sanctumについての記事です。参考になりました。
personal_access_tokens テーブルの作成
このテーブルは、Sanctumがトークンベースの認証に使用する
トークン情報を管理するためのもの です。
認証を行う際にユーザーの発行したトークンを保存・管理するためのテーブルです。
テーブルのカラムを見てみましょう。
Schema::create('personal_access_tokens', function (Blueprint $table) {
$table->id();
$table->morphs('tokenable'); // ユーザーなどのモデルを関連付ける
$table->string('name'); // トークンの名前
$table->string('token', 64)->unique(); // トークン(ハッシュ化されて保存)
$table->text('abilities')->nullable(); // トークンのスコープや権限
$table->timestamp('last_used_at')->nullable(); // トークンが最後に使用された時間
$table->timestamp('expires_at')->nullable(); // トークンの有効期限
$table->timestamps(); // 作成日時や更新日時
});
…気になったのはtakenaableとかabilitiesでしょうか?
tokenable は、トークンが関連付けられる「モデル」を指します。
通常は、Userモデルが指定されています。
abilities では、トークンの持つ権限が保存されます。
例えば、read-onlyやfull-access等のスコープが設定可能です。
私の過去に作成したものでは、特に指定していなかったため[*](全て)になっています。
last_used_at は、トークンが最後に使用された日時が保存されます。
トークンがアクティブに使用されているかどうか等を監視するのに役立つ情報です。
認証フロー
最後に、簡単に認証フローを説明しましょう。
1 トークンの発行
認証されたユーザーに対して、クライアントアプリケーションからトークンを発行する。
2 トークンをつかってAPIにアクセス
クライアントは発行されたトークンを保存しAPIリクエスト時にヘッダーに含めて送信する。
3 トークンによる認証
サーバー側では送信されたトークンをpersonal_access_tokensテーブルに保存されている
トークンと照合し、ユーザーを認証する。
以上の手順によってトークンベースのAPI認証が実装されるのです。
まとめ
私は、普段から気になることをすぐに調べたりしません。今回は衝動的にまとめてみましたが、
API認証について、Laravelの機能を交えて学習する事が出来て良かったです。
フレームワークは強力で、開発者の作業をパワフルに効率化してくれます。
しかし、その隠蔽された処理を理解していくことはフレームワークへの習熟の第いっぽになると
信じて地道にLaravelと仲良くなりたいなと思います。
読んでいただきありがとうございました。
Discussion