いよいよ 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 形式で取得することができました.