LoginSignup
7
8

More than 3 years have passed since last update.

Laravel開発:3.APIの作成

Last updated at Posted at 2018-10-01

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

はじめに

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

今回は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-&gt;delete()) {
        return new TaskResource($task);
    }

}

public function store(Request $request)  {

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

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

    if($task-&gt;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」

参考

7
8
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
7
8