Laravel開発:3.APIの作成

Laravel

はじめに

Laravel開発:2.ユーザ認証と管理画面を作成する
はじめにこちらの続きとなっています。ユーザと管理者で認証を分けるために、ユーザの管理テーブルとして「clients」を追加しています。管理画面は「 Voyager」を使用しています。環境:OS : macOS High S...

こちらの続きとなっています。

今回はLaravelで簡単にAPIを作ってみようと思います。またSeederを使用して簡単なサンプルデータを作成しています。

環境:

OS : macOS High Sierra 10.13.6

MAMP : 5.1

Laravel : 5.7.6

データの作成

マイグレーションファイルの作成

予定のデータとして「task」テーブルを作成していきます。

$ php artisan make:migration create_tasks_table --create=tasks

「/database/migrations/DATETIME_create_tasks_table.php」を編集します。

public function up()
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');         // 追加
        $table->text('description');    // 追加
        $table->integer('client_id');   // 追加
        $table->timestamps();
    });
}

モデルを作成する

$ php artisan make:model Task

マイグレーションの実行

$ php artisan migrate

サンプルデータの作成

Seederを作成する

初期データを作成するために「seeder」を使用する

$ php artisan make:seeder ClientsTableSeeder
$ php artisan make:seeder TasksTableSeeder

「/database/seeds/ClientsTableSeeder.php」

public function run()
{
    factory(App\Client::class, 50)->create();
}

「/database/seeds/TasksTableSeeder.php」

public function run()
{
    factory(App\Task::class, 50)->create();
}

「/database/seeds/DatabaseSeeder.php」

public function run()
{
    $this->call(ClientsTableSeeder::class);
    $this->call(TasksTableSeeder::class);
}

Seederを実行すると、「ClientsTableSeeder.php」と「TasksTableSeeder.php」を実行して50件のサンプルデータを作成することができるようになりました。

Model Factoryを作成する

ModelFactoryで「Faker」を使用して、それらしくサンプルデータを作成します。

$ php artisan make:factory ClientFactory
$ php artisan make:factory TaskFactory

「/database/factories/ClientFactory.php」

<?php
// app/database/factories/UserFactory.php
use Faker\Generator as Faker;
 
$factory->define(App\Client::class, function (Faker $faker) {
    static $password;
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

「/database/factories/TaskFactory.php」

<?php
// app/database/factories/TaskFactory.php
use Faker\Generator as Faker;
$factory->define(App\Task::class, function (Faker $faker) {
    $clients = App\Client::pluck('id')->toArray();
    return [
        'name' => $faker->unique()->name,
        'description' => $faker->realText(200),
        'client_id' => $faker->randomElement($clients)
    ];
});

日本語に設定する

このままだと英語のサンプルデータになるので日本語設定にします

「/config/app.php」に追記します

'faker_locale' => env('DEV_FAKER_LOCALE', 'en_US'),

「/.env」に追記します。

DEV_FAKER_LOCALE=ja_JP

Seederを実行する

$ php artisan db:seed

確認

管理画面からサンプルデータが作成されていることを確認します。

コントローラの作成

Taskのリソースを作成する

$ php artisan make:resource Task

「/app/Http/Resources/Task.php」を編集する

public function toArray($request)
{
    return [
        'id' => $this->id,
        'task' => $this->name,
        'task_description' => $this->description
    ];
}

TaskContorllerを作成する

$ php artisan make:controller TaskController

「/app/Http/Controllers/TaskController.php」を編集する

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Resources;
use App\Task;
use App\Http\Resources\Task as TaskResource;

class TaskController extends Controller
{
    public function index()
    {
        //Get all task
        $tasks = Task::paginate(15);

        // Return a collection of $task with pagination
        return TaskResource::collection($tasks);
    }

    public function show($id)
    {
        //Get the task
        $task = Task::findOrfail($id);

        // Return a single task
        return new TaskResource($task);
    }

    public function destroy($id)
    {
        //Get the task
        $task = Task::findOrfail($id);

        if($task->delete()) {
            return new TaskResource($task);
        }

    }

    public function store(Request $request)  {

        $task = $request->isMethod('put') ? Task::findOrFail($request->task_id) : new Task;

        $task->id = $request->input('task_id');
        $task->name = $request->input('name');
        $task->description = $request->input('description');
        $task->user_id =  1; //$request->user()->id;

        if($task->save()) {
            return new TaskResource($task);
        }

    }
}

ルーティングの設定

「/routes/api.php」

// get list of tasks
Route::get('tasks','TaskController@index');
// get specific task
Route::get('task/{id}','TaskController@show');
// create new task
Route::post('task','TaskController@store');
// update existing task
Route::put('task','TaskController@store');
// delete a task
Route::delete('task/{id}','TaskController@destroy');

確認

postmanでAPIの動作を確認してみます。

「http://localhost:8888/api/tasks」

参考

How to create RESTful API in Laravel 5.7 - Arjun
In this tutorial, I will show you creating RESTful apis using Laravel 5.7 php framework. We gonna use the Laravel’s API resources to build RESTful APIs. Laravel...
faker を使ってダミーデータを生成する
目次faker とはfaker の使い方基本的な使い方どういうプロパティが用意されているかORMとの連携シード値を設定するfaker の内部、プロバイダの話faker を使ってみてこれこれ、このライブラリ。 fzanin
LaravelのFakerとSeedingでダミーデータを自動生成しデータベースへ投入する
Laravelにてマイグレーション実行時にシーディングにて初期データを投入しますが、その際に、Fakerにてダミーデータを生成して登録していきます。開発時にユーザデータや商品情報などのテスト用のデータを用意する必要があった時でも、LaravelではFakerというライブラリを使えば、テスト用のフェイクデータを自動で何件...

コメント

  1. […] こちらの内容はブログにアップしています。 […]