サクッと Laravel で API を作るためのメモ
バージョン
PHP 7.3.29
Laravel 8系
artisan コマンド
「職人」を意味する言葉。
Laravelが用意しているコマンドラインインターフェイス。
モデルやコントローラーもこのコマンドで作成する。
参考
https://readouble.com/laravel/8.x/ja/artisan.html
https://qiita.com/zaburo/items/37768b743ed6d0e28bf5
Model 作成
Laravel ではEloquentというORMを用いてDB接続を行う。情報の取得、追加、更新、削除も可能。
コマンド
これでモデル作成できる。
// Task モデルの作成
php artisan make:model Task -m
モデルが作成されたら Models/Task.php
が作成される。モデルの関連付けるテーブルと書き込み可能なフィールドを指定する。
class Task extends Model
{
protected $table = 'tasks';
protected $fillable = ['title', 'content'];
}
migration ファイル
同時に database/migration
直下にマイグレーションファイルが作成される。
マイグレーションはデータベースのバージョン管理のようなもので、チームがアプリケーションのデータベーススキーマを定義および共有できるようにします。ソース管理から変更を取得した後に、ローカルデータベーススキーマにカラムを手動で追加するようにチームメートに指示する必要があったことを経験していれば、データベースのマイグレーションにより解決される問題に直面していたのです。
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('content');
$table->timestamps();
});
}
参考
Controller 作成
すべてのリクエスト処理ロジックをルートファイルのクロージャとして定義する代わりに、「コントローラ」クラスを使用してこの動作を整理することを推奨します。コントローラにより、関係するリクエスト処理ロジックを単一のクラスにグループ化できます。
多分ルートに書きすぎたら記述量が増えるからコントローラーに書いて整理する、みたいな感じ。
php artisan make:controller TaskController
コマンド実行後 /Controllers/TaskController.php
が作成される。
// モデルを呼び出す
use App\Models\Task;
class TaskController extends Controller
{
public function getAllTasks()
{
$tasks = Task::get()->toJson(JSON_PRETTY_PRINT);
return response($tasks, 200);
}
public function createTask(Request $request)
{
$task = new Task;
$task->title = $request->title;
$task->content = $request->content;
$task->save();
return response()->json([
"message" => "task record created"
], 201);
}
public function getTask($id)
{
if (Task::where('id', $id)->exists()) {
$task = Task::where('id', $id)->get()->toJson(JSON_PRETTY_PRINT);
return response($task, 200);
}
}
public function updateTask(Request $request, $id)
{
if (Task::where('id', $id)->exists()) {
$task = Task::find($id);
$task->name = is_null($request->name) ? $task->name : $request->name;
$task->course = is_null($request->course) ? $task->course : $request->course;
$task->save();
return response()->json([
"message" => "records updated successfully"
], 200);
} else {
return response()->json([
"message" => "task not found"
], 404);
}
}
public function deleteTask($id)
{
if (Task::where('id', $id)->exists()) {
$task = Task::find($id);
$task->delete();
return response()->json([
"message" => "records deleted"
], 202);
} else {
return response()->json([
"message" => "task not found"
], 404);
}
}
}
よかった記事
https://qiita.com/S346/items/9c5718b960eb0501c91f
Request $request とは
Route 作成
api.php
Route::get('tasks', [TaskController::class, 'getAllTasks']);
Route::get('tasks/{id}', [TaskController::class, 'getTask']);
Route::post('tasks', [TaskController::class, 'createTask']);
Route::put('tasks/{id}', [TaskController::class, 'updateTask']);
Route::delete('tasks/{id}', [TaskController::class, 'deleteTask']);
動作確認
Laravel の API は
おしまい