【初心者向け】LaravelでAPIを実装する方法

Laravel
スポンサーリンク

LaravelでAPIを実装する方法をまとめました。

本記事のゴール

JSONを返すAPIを作成し、

Talend API Testerを使ってAPIを呼び出したいと思います。

前提条件

PHPとmysqlがインストールされていること

Laravel6.0のプロジェクトが作成されていること

コントローラ・リソース作成

artisanでコントローラを作成します。

以下のartisanコマンドを実行してください。

php artisan make:controller Api/TaskController

app/Http/ControllersにApiフォルダが作成されます。

そして、そのフォルダの中にTaskControllerが作られていると思います。

TaskControllerの中身は以下のようになっています。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    //
}

コントローラに手を加えます。

DBから必要な値を取得し、json形式に変換して返すようにします。

TaskControllerを以下のように書き換えてください。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Task;
use App\Http\Resources\TaskResource;

class TaskController extends Controller
{
    public function getTask(Request $request) {
        return TaskResource::collection(Task::all());
    }
}

次にリソースの作成を行います。

以下のartisanコマンドを実行してください。

php artisan make:resource TaskResource   

app/Resources/TaskResource.phpが作られます。

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class TaskResource extends JsonResource
{
    /**
     * リソースを配列へ変換する
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'task' => $this->task,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

ちなみにリソースを作成しなくても、以下のようにreturnすればJSONを返すことができます。

return response()->json(['data' => $data]);

ただ、より大きなサービスの開発を行う場合、DBから取得したデータを整形する必要が出てきます。

それをコントローラ内で実施すると、コントローラを肥大化させる要因になります。

従って、リソースを利用した方が良いと思っています。

上記は個人的な意見です。

モデル作成(マイグレーションを含む)

続いてモデルを作成します。

コントローラーと同様に、artisanコマンドで作成します。

※mオプションをつけると、マイグレーションも生成できます。

php artisan make:model Task -m

app/Http/にTaskControllerが作成され、

database/migrationsに2020_08_06_102534_create_tasks_table.phpが作成されているはずです

2020_08_06_102534_create_tasks_table.phpを以下のように書き換えてください。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('task');    //追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

DB作成・テーブル作成

MySQLを起動します。

sudo service mysqld start

MySQLに接続します。(rootユーザで接続しますが、適宜変えてください)

mysql -u root

DBを作成します。

create database task;

.envファイルを書き換えます。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=task
DB_USERNAME=root
DB_PASSWORD=

テーブルを作成する前に、app/Http/Providers/AppServiceProvider.phpに1行追加してください。

〜省略〜

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        \Schema::defaultStringLength(191); //追加
    }
}


その後マイグレーションを実行します。

マイグレーションファイルはすでに作成しておりますので、以下のコマンドを実行するだけでOkです!

php artisan migrate

taskテーブルが作成できていると思います。

テストデータ生成

seedでテストデータを作成します。

まずは以下のコマンドでシーダ(Seeder)を作成してください

php artisan make:seeder TasksTableSeeder

database/seedsの中にTasksTableSeeder.phpが作成されていると思います。

TasksTableSeeder.phpを以下のように書き換えてください。

<?php

use Illuminate\Database\Seeder;

class TasksTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        for($i = 1; $i <= 50; $i++) {
            DB::table('tasks')->insert([
                'task' => 'task ' . $i,
                'created_at' => now(),
                'updated_at' => now()
            ]);
        }
    }
}

タスクテーブルに50件レコードが追加されているはずです。

ルートを追加

route/api.phpに以下のルートを追加してください。

Route::get('getTask', 'Api\TaskController@getTask');

APIを叩いてみましょう!!

最後に動作確認です。

Talend API Testerを起動してください。

URLフォームにhttps://{ドメイン}/api/getTaskを入力して、Sendボタンを押下してください

以下の画像のように値が取得できれば成功です!

お疲れ様でした!

Laravel
スポンサーリンク
エンジニアの日記

コメント