この3つのドキュメントを見ながら簡単なAPIを作る。
まず簡単に /api/rankings/weekly
というパスを叩いてレスポンスが返ってくるようにする。
-Route::get('/user', function (Request $request) { - return $request->user(); -})->middleware('auth:api'); +Route::get('/ranking/{type}', function ($type) { + return 'Ranking type: '.$type; +});
これで http://localhost:8000/api/ranking/weekly を叩いてみたところが以下。
上の差分には '/api' というパスは書いてないが、これは app/Providers/RouteServiceProvider.php に
/** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapApiRoutes() { Route::group([ 'middleware' => 'api', 'namespace' => $this->namespace, 'prefix' => 'api', ], function ($router) { require base_path('routes/api.php'); }); }
で 'prefix' が予め登録されているためで、もし他のパスにしたければ上記の部分を適当に修正すれば良い。
Laravelにはcontrollerを自動生成するためのコマンドがあり、さらにResource Controllersというもので、CRUDなAPIのパスの雛形を自動生成してくれる。
というわけで早速以下のコマンドを叩いてRankingControllerを作る。
$ php artisan make:controller RankingController --resource Controller created successfully.
-Route::get('/ranking/{type}', function ($type) { - return 'Ranking type: '.$type; -}); +Route::resource('rankings', 'RankingController', ['only' => ['index', 'show',]]);
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class RankingController extends Controller { /** * Show weekly rankings. * * @return \Illuminate\Http\Response */ public function index() { return response()->json([ 'type' => 'weekly', 'rankings' => [ [ 'rank' => 1, 'name' => 'hoge', ], [ 'rank' => 1, 'name' => 'hoge', ], ] ]); } /** * Show weekly / monthly / danger rankings. * * @param string $type * @return \Illuminate\Http\Response */ public function show($type) { return response()->json([ 'type' => $type, 'rankings' => [ [ 'rank' => 1, 'name' => 'hoge', ], [ 'rank' => 1, 'name' => 'hoge', ], ] ]); } }
仮組みなのでとりあえずこんな感じで作って、http://localhost:8000/api/rankings を叩いてみると
http://localhost:8000/api/rankings/monthly なら
おk。この次はVueにデータを渡すためにどんなJSONにするかと実際にVueにバインドしてみる。
今日はここまで。