概要
LaravelでAPIサーバーを作成する際の要点をこの記事にまとめる。
以下のように実装すれば、主要観点を最短で実装できないか?と思う。
① routes/api.php にPATHを設定
routes/api.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PlayerController;
~
Route::prefix('player')->group(function () {
Route::get('/', [PlayerController::class, 'index']);
Route::get('/{id}', [PlayerController::class, 'detail'])->where('id', '[0-9]+');
Route::post('/', [PlayerController::class, 'insert']);
Route::patch('/{id}', [PlayerController::class, 'update'])->where('id', '[0-9]+');
Route::get('/search', [PlayerController::class, 'search']);
}
この時URIは api/player/...
となることは、以下のコマンドでも確認できる。
php artisan route:list
②コントローラにAPIサーバの機構を実装
App\Http\Controllers\PlayerController.php
use App\Models\Player;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
~
public function index(): JsonResponse
{
$player = Player::all();
return response()->json($player, options: JSON_UNESCAPED_UNICODE);
}
public function detail(int $id): JsonResponse
{
$player = Player::find($id);
return response()->json($player, options: JSON_UNESCAPED_UNICODE);
}
public function insert(Request $request): JsonResponse
{
$createdRecord = Player::create($request->all());
return response()->json($createdRecord, 201, options: JSON_UNESCAPED_UNICODE);
}
public function update(int $id, Request $request): JsonResponse
{
$player = Player::where(['id' => $id]);
$updateResult = $player->update($request->except('id')) ? 'success' : 'failure';
return response()->json(['result' => $updateResult]);
}
public function search(Request $request): JsonResponse
{
$players = Player::findBySearchRequest($request);
return response()->json($players, options: JSON_UNESCAPED_UNICODE);
}
③モデルにDBとのやり取りのロジックを書く
App\Http\Models\Player.php
static public function findBySearchRequest(Request $request)
{
// 検索ロジックを書く(個別の状況によると思うので今回は割愛)
return $players;
}
以上で、完成である。
補足
APIのテストについて
簡易なGETメソッドのテストならURLを以下のようにすれば良い。
/search?text=テスト&age=20
POST、PUTCHなどのメソッドはじめ、詳細にテストしたい場合は、以下のようなツールなどを使うのが良いと思います。
記事をお読みいただき、ありがとうございました!
もし参考になったと感じましたら、「いいね」や共有など頂けたら嬉しく思います!
何卒よろしくお願い致します!