2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP / Laravel でサクッとAPI作る

Last updated at Posted at 2022-04-24

サクッと 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 は

スクリーンショット 2022-04-24 15.13.13.png

スクリーンショット 2022-04-24 15.12.49.png

おしまい

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?