目標
WebAPIの練習として、 DBに保存されたデータをJSON出力する。
やらないこと
API認証
DBにデータを用意
今回はsqliteを使用する。
まずは.envを修正していく。
DB_*の項目を削除して、DB_CONNECTION=sqlite
を追加。
SQLiteファイルの作成。
touch database/database.sqlite
tasksテーブルの雛形を作成する。
php artisan make:migration create_tasks_table
雛形が作られるので、upメソッドを修正する。
/** * Run the migrations. * * @return void */ public function up() { Schema::create('tasks', function (Blueprint $table) { $table->increments('id'); $table->string('name')->nullable(false); $table->boolean('is_done')->default(false); $table->timestamps(); }); }
マイグレーション実行。 DBにテーブルが作成される。
php artisan migrate
モデルを作っていく
Taskモデルの雛形を作成。
php artisan make:model Task
生成された雛形を変更する。
// app/Task.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Task extends Model { protected $fillable = ['name', 'is_done']; protected $casts = [ 'is_done' => 'boolean' ]; }
コントローラを作っていく
Taskコントローラの雛形を作成。
php artisan make:controller TaskController --resource
全てのデータを取得し、返却する。
// app/Http/Controllers/TaskController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Task; class TaskController extends Controller { public function index() { // 配列を返すと、Laravelが自動でJSONにしてくれる return Task::get(); } }
テストデータを投入する
database/factories/UserFactory.php
をコピーして、TaskFactoryを作成する。
// database/factories/TaskFactory.php <?php use Faker\Generator as Faker; $factory->define(App\Task::class, function (Faker $faker) { return [ 'name' => $faker->name, 'is_done' => $faker->boolean(), ]; });
seederを修正
// database/seeds/DatabaseSeeder.php <?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(App\Task::class, 30)->create(); } }
データ投入
php artisan db:seed
ブラウザからデータを確認してみる
API用のroutingを設定する
// laravel-vue-todo/routes/api.php <?php use Illuminate\Http\Request; Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::apiResource('tasks', 'TaskController');
ブラウザからhttp://localhost:8000/api/tasks
にアクセスするとJSONデータが返ってきてることが確認できるはず。(整形されてない。。。)
※リクエストを投げたときにConnection refusedエラーになったので、サーバを起動しなおした。
参考
https://laravel.com/docs/5.6/eloquent-mutators#attribute-casting