前回の続きでLaravelでAPIを作っていきます。
以前の記事はこちら
作る内容はTODO用のAPIで元ネタは僕が技術書典9で頒布したKtorをLaravel版に作り変えていきます。詳細は以下を御覧ください。
DDLの準備
MySQLにテーブルを作成するためのDDLを用意します。 docker/db/sql
配下に init.sql
ファイルを作成します。
CREATE TABLE todos ( id int(11) NOT NULL AUTO_INCREMENT, task TEXT NOT NULL, PRIMARY KEY (id) );
ファイルを配置したらdocker-composeを起動させ、テーブルが作られていることを確認します。
もし作られないようであれば docker/db/data
内をすべて削除してから起動してみてください。
.env
LaravelからMySQLに接続するための設定を.envファイルに設定します。
その他にもRedisやメールサーバ、AWSの設定などがありますが、デフォルトのままでOKです。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=docker DB_PASSWORD=docker
初期画面の削除
RESTfulなAPIサーバになるので初期画面を表示は削除します。
server/routes/web.php
に書かれているルーティングはコメントにしておきます。 http://localhost
にアクセスすると404が表示されます。
エンドポイント
APIの接続口となるエンドポイントを先に設定してしまいます。 今回利用するエンドポイントは以下になります。
- GET /todos
- GET /todos/{id}
- POST /todos
- PUT /todos/{id}
- DELETE /todos/{id}
server/routes/api.php
に追記します。
Route::get("/todos", [TodosController::class, "getTodos"]); Route::get("/todos/{id}", [TodosController::class, "getTodo"]); Route::post("/todos/{id}", [TodosController::class, "createTodo"]); Route::put("/todos/{id}", [TodosController::class, "updateTodo"]); Route::delete("/todos/{id}", [TodosController::class, "deleteTodo"]);
/todos
にアクセスされると TodosController
の getTodos
メソッドが呼び出されるという意味となります。
Controller
server/app/Http/Controllers
に TodosController
クラスを作っていきます。とりあえず空っぽのResponseを返すようにしておき、実際のDBとの接続は次回としたいと思います。
<php use Illuminate\Routing\Controller as BaseController; class TodosController extends BaseController { public function getTodos(Request $request): JsonResponse { return response()->json([], 200); } public function getTodo(Request $request, int $id): JsonResponse { return response()->json([], 200); } public function createTodo(Request $request, int $id): JsonResponse { return response()->json(null, 201); } public function updateTodo(Request $request, int $id): JsonResponse { return response()->json(null, 201); } public function deleteTodo(Request $request, int $id): JsonResponse { return response()->json(null, 201); } }
$ curl http://localhost/api/todos []
今回はここまで。次回はDBとの接続を行い完成を目指します。