ToDoリストAPIを作ってみる
- GET: /todos ... 全てのToDoを返す
- POST: /todos ... 新規のToDoを作る
- GET: /todos/{id} ... id番のToDoを返す
- PUT: /todos/{id} ... id番のToDoを更新
- DELETE: /todos/{id} ... id番のToDoを削除
フロントReact編もあるのでよかったらそちらもどうぞ。
=> Laravel5.5 + React 超入門チュートリアル その1 - 今からお前んちこいよ
プロジェクトの作成
$ composer create-project laravel/laravel laravel-react-example "5.5.*" $ cd laravel-react-example $ touch database/database.sqlite
.env ファイルを修正。今回はお手軽にSQLiteを使う。
- DB_CONNECTION=mysql + DB_CONNECTION=sqlite - DB_HOST=127.0.0.1 - DB_PORT=3306 - DB_DATABASE=homestead - DB_USERNAME=homestead - DB_PASSWORD=secret
tinkerでDB接続確認
$ php artisan tinker >>> DB::connection() => Illuminate\Database\SQLiteConnection {#725}
ToDoテーブルを作る
migrationファイルの生成
$ php artisan make:migration create_to_dos_table --create=to_dos
databese/migration/[作ったmigrationファイル] を編集
public function up() { Schema::create('to_dos', function (Blueprint $table) { $table->increments('id'); + $table->string('title'); + $table->string('description'); $table->timestamps(); }); }
migrateの実行
$ php artisan migrate
ToDoモデルを作る
モデルファイルの生成
$ php artisan make:model ToDo # => app/ToDo.php が作られる
tinkerでテーブルの確認
$ php artisan tinker >>> \App\ToDo::all() => Illuminate\Database\Eloquent\Collection {#740 all: [], } >>> $todo = new \App\ToDo() >>> $todo->title = "test title" >>> $todo->description = "test desc" >>> $todo->save() >>> \App\ToDo::all() ~~~ 登録したデータがでる ~~~
ルーティングを作る
routes/web.php
+ Route::prefix('api')->group(function(){ + Route::resource('todos', 'ToDosController', ['only'=>['index', 'store', 'show', 'update', 'destroy']]); + });
現在のアプリケーションのルーティングを確認する
$ php artisan route:list +--------+-----------+------------------+---------------+----------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------+---------------+----------------------------------------------+--------------+ | | GET|HEAD | api/todos | todos.index | App\Http\Controllers\ToDosController@index | web | | | POST | api/todos | todos.store | App\Http\Controllers\ToDosController@store | web | | | GET|HEAD | api/todos/{todo} | todos.show | App\Http\Controllers\ToDosController@show | web | | | PUT|PATCH | api/todos/{todo} | todos.update | App\Http\Controllers\ToDosController@update | web | | | DELETE | api/todos/{todo} | todos.destroy | App\Http\Controllers\ToDosController@destroy | web | | | GET|HEAD | api/user | | Closure | api,auth:api | +--------+-----------+------------------+---------------+----------------------------------------------+--------------+
必要なアクションは
- index ... 一覧情報を返す
- store ... 保存する
- show ... 特定の情報を返す
- update ... 更新する
- destroy ... 削除する
ToDosコントローラを作る
$ php artisan make:controller ToDosController # => app/Http/Controllers/ToDosController.php が作られる
app/Http/Controllers/ToDosController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\ToDo; class ToDosController extends Controller { function index(){ $todos = ToDo::all(); return response()->json($todos); } function store(Request $request){ $this->validate($request, [ 'title' => 'required|max:255', 'description' => 'required|max:255', ]); $todo = new ToDo(); $todo->title = $request->title; $todo->description = $request->description; $todo->save(); return response()->json(); } function show(Request $request, $id){ $todo = ToDo::find($id); return response()->json($todo); } function update(Request $request, $id){ $this->validate($request, [ 'title' => 'required|max:255', 'description' => 'required|max:255', ]); $todo = ToDo::find($id); $todo->title = $request->title; $todo->description = $request->description; $todo->save(); return response()->json(); } function destroy(Request $request, $id){ $todo = ToDo::find($id); $todo->delete(); return response()->json(); } }
これで完成。
あとはサーバを起動して動作を確認
$ php artisan serve
React編:
(その1)http://www.hakopako.net/entry/2018/01/17/220538
(その2)http://www.hakopako.net/entry/2018/01/17/220620
(その3)http://www.hakopako.net/entry/2018/01/17/220707
(その4)http://www.hakopako.net/entry/2018/01/17/220730