人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel で バックエンド REST API を作成する

● APIコントローラーの作成

php artisan make:controller Api/CategoryController --api

app/Http/Controllers/API/CategoryController.php が自動生成されます。

● ルーティングを設定する

routes/api.php

// API Category
Route::group(['middleware' => ['api']], function () {
    Route::resource('articles', 'Api\CategoryController');
});

● 設定したルートを確認する

php artisan route:list
| GET|HEAD  | api/categories                  | categories.index   
| POST      | api/categories                  | categories.store   
| GET|HEAD  | api/categories/create           | categories.create  
| GET|HEAD  | api/categories/{category}       | categories.show    
| PUT|PATCH | api/categories/{category}       | categories.update  
| DELETE    | api/categories/{category}       | categories.destroy 
| GET|HEAD  | api/categories/{category}/edit  | categories.edit       

● コントローラーのメソッドを記述していく

app/Http/Controllers/API/CategoryController.php

index()

    public function index()
    {
        $categories = \App\Category::all();
        return $categories;
    }

return $categories; のところは次のようにしてもいいでしょう

        return $categories->toJson(JSON_UNESCAPED_UNICODE);

store()

    public function store(Request $request)
    {
        $category = new \App\Category;
        $category->fill( $request->all() )->save();
        return $category;
        // return response('store OK', 200);
    }

どのような値を返すのかはフロントエンドの実装によります。 上の例では作成したモデルをjsonで返しています。

show()

    public function show($id)
    {
        $category = \App\RakutenCategory::find($id);
        return $category;
    }

update()

    public function update(Request $request, $id)
    {
        $category = \App\RakutenCategory::findorFail($id);
        $category->fill( $request->all() )->save();
        return $category;
        // return response('update OK', 200);
    }

destroy()

    public function destroy($id)
    {
        $category = \App\RakutenCategory::findorFail($id);
        $category->delete();
        return $category;
        // return response('delete OK', 200);
    }

これで完成です。 あとはフロントエンド( Angular / React / Vue.js )からガリガリ操作してください。

No.1700
10/12 15:43

edit