今からお前んちこいよ

多摩川沿いにて細々とお勉強。

Laravel5.5 で REST API 入門チュートリアル

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

API編:
Laravel5.5 で REST API 入門チュートリアル - 今からお前んちこいよ