Route:apiRresourceを使おう【Laravel Routing】
今回はルーティングに関して、便利機能を紹介します。
「Route::apiResource」は簡単にCRUDのルーティングが作れる優れもので、ルーティングの記述がコンパクトに分かりやすくなります。
また「Route::resource」とは違ってAPI開発に特化にしたルーティングとなっているので、いつもAPI開発してるから「Route::resource」とは無縁なんだよ〜〜っていう人はこちらをおすすめします。
Route:apiRresourceとは
Route::apiResourceを使用すると、「一覧取得」「個別取得」「登録」「更新」「削除」のルーティングを作ることができます。
APiの場合は登録画面と更新画面の表示が必要ないのでRoute::resourceより数が少なくなっています。
Route::apiResource('user', UserController::class);
php artisan route::list
と打つと定義されているルーティングの一覧が表示されます。
$ php artisan route:list
+--------+-----------+-----------------+--------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-----------------+--------------+-------------------------------------------------+------------+
| | GET|HEAD | api/user | user.index | App\Http\Controllers\Api\UserController@index | api |
| | POST | api/user | user.store | App\Http\Controllers\Api\UserController@store | api |
| | GET|HEAD | api/user/{user} | user.show | App\Http\Controllers\Api\UserController@show | api |
| | PUT|PATCH | api/user/{user} | user.update | App\Http\Controllers\Api\UserController@update | api |
| | DELETE | api/user/{user} | user.destroy | App\Http\Controllers\Api\UserController@destroy | api |
+--------+-----------+-----------------+--------------+-------------------------------------------------+------------+
これで5つのルートが定義されました!
定義したルーティングの一部だけ使いたい場合
apiResourceのルートの内一部だけ使いたい場合は公式ページにやり方が書かれていないですが、「Route::resource」の方法と同じ方法でできます。
1つはonlyを使う方法で、こちらは使用したいルートを宣言する方法です。
もう一つはexceptを使う方法で、こちらは使用したくないルートを宣言する方法です。
Route::apiResource('users', UserController::class)->only([
'index', 'show'
]);
Route::apiResource('users', UserController::class)->except([
'create', 'store', 'update', 'destroy'
]);
使用したいルートを宣言するほうが分かりやすいと、個人的には思っています。
Route::apiResourceに対応するControllerを簡単に作る
make:controllerの「api」オプション
Controllerを作成する際に「api」オプションを付けると、作成できます。
$ php artisan make:controller Api/UserController --api
Controller created successfully.
実際に作成されたControllerはこのような感じです。
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
make:modelの「api」オプション
make:Modelでも「api」オプションをつけると、モデルとapiResourceに対応するControllerを作成できます。
$ php artisan make:model User --api
コントローラと一緒にモデルも作成シたい場合はこちらがおすすめです。
また、make:Modelの他のオプションでファクトリやシーダー、マイグレーションなど関連ファイルも作成できるので、関連ファイルを一気に作成したい場合はmake:Modelでオプションを付けてファイル生成することをおすすめします。
make:Modelのオプションについてはこちらで解説しています。
終わりに
AP開発ではない場合は「Route::resource」、API開発の場合は「Route::apiResource」が便利ですので、必要に応じて使い分けてみてくださいね!
Discussion