Laravel 10 入門トップページ


目次

  1. API とプロジェクトの概要
  2. プロジェクトの作成と初期設定
  3. データベースのマイグレーション
  4. シーダによるコメントデータの登録
  5. モデルの生成
  6. リソースの生成
  7. GETメソッドを利用した個別コメント取得のAPI作成
  8. 日本語文字列の表示と日時の調整
  9. GETメソッドを利用したコメント一覧取得のAPI作成
  10. データのラップ
  11. POSTメソッドを利用したコメントの新規投稿APIの作成
  12. PUTメソッドを利用したコメント更新APIの作成
  13. DELETEメソッドを利用したコメント削除APIの作成
  14. シーダの拡張
  15. ページネーションの実装
  16. 個別コメントをコントローラで取得
  17. Postman の利用
  18. ユーザ情報を登録する
  19. Sanctum によるユーザ認証
  20. ログインとトークン
  21. コメントとユーザのリレーションシップ
  22. 新規投稿時にユーザIDを記録する
  23. コメントからユーザ名を表示するリレーションシップ
  24. ユーザからコメント一覧を取得するリレーションシップ
  25. 更新と削除の権限設定
  26. 発行済みトークンの取得
  27. トークンの有効期限
  28. レート制限
  29. 閲覧権限の緩和

Laravel で API を開発する

GETメソッドを利用した個別コメント取得のAPI作成

いよいよ API を作成して,その API に接続します.まずはコメントを1件取得する API を作成することにします.

API のルート定義は routes/api.php にあります.まずその内容を確認します.

routes/api.php
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

次にプロジェクト全体でのルートの定義をコマンドを使って確認します.API に関するルートの URI は api/ 以下になることに注意してください.

vagrant@ubuntu2204 CommentAPI $ php artisan route:list ⏎

  GET|HEAD   / .........................................................
  POST       _ignition/execute-solution ignition.executeSolution › Spat…
  GET|HEAD   _ignition/health-check ignition.healthCheck › Spatie\Larav…
  POST       _ignition/update-config ignition.updateConfig › Spatie\Lar…
  GET|HEAD   api/user ..................................................
  GET|HEAD   sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum …

                                                      Showing [6] routes

vagrant@ubuntu2204 CommentAPI $

ルート定義を変更して,コメントを1件取得するルートを定義します.とりあえずはコントローラを使わずにルート定義の中で完結させます.

routes/api.php
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Resources\CommentResource;
use App\Models\Comment;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::get('/comments/{id}', function (string $id) {
    return new CommentResource(Comment::findOrFail($id));
});

ルートが正しく定義できているか次のコマンドで確認します.新たに api/comments/{id} のルートが定義され,合計7件になったことが確認できました.

vagrant@ubuntu2204 CommentAPI $ php artisan route:list ⏎

  GET|HEAD   / .........................................................
  POST       _ignition/execute-solution ignition.executeSolution › Spat…
  GET|HEAD   _ignition/health-check ignition.healthCheck › Spatie\Larav…
  POST       _ignition/update-config ignition.updateConfig › Spatie\Lar…
  GET|HEAD   api/comments/{id} .........................................
  GET|HEAD   api/user ..................................................
  GET|HEAD   sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum …

                                                      Showing [7] routes

vagrant@ubuntu2204 CommentAPI $

Web サーバを起動します.

vagrant@ubuntu2204 CommentAPI $ php artisan serve --host=192.168.56.101 --port=8000 ⏎

   INFO  Server running on [http://192.168.56.101:8000].

  Press Ctrl+C to stop the server

いよいよ curl コマンドを使って API に接続します.API への接続は Windows クライアントのコマンドプロンプト(またはパワーシェルや mac のターミナル)などから行います.

C:\Users\Rinsaka>curl http://192.168.56.101:8000/api/comments/1/ ⏎
{"data":{"id":1,"title":"\u6700\u521d\u306e\u30b3\u30e1\u30f3\u30c8","body":"\u6700\u521d\u306e\u30b3\u30e1\u30f3\u30c8\u3067\u3059\uff01","created_at":"2023-10-02T01:10:10.000000Z","updated_at":"2023-10-02T01:10:10.000000Z"}}
C:\Users\Rinsaka>

投稿日時 (created_at) と最終更新日時 (updated_at) がデータベースに設定された日時(10時10分10秒)から9時間ずれて1時10分10秒になっていることと,日本語文字など非ASCII文字を含む文字列データが Unicode エスケープされていますが,API からコメントデータを JSON 形式で取得することができました.

目次に戻る