簡単なWebAPIを実装する
コントローラーを作る
$ php artisan make:controller Api/UserController --resource
すると、<LaravelRoot>/app/Http/Controllers/Api/UserController.phpというコントローラーのソースコードが作成されます。
ソースコードの中身は以下のとおりです。
<?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()
{
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* 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)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($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)
{
//
}
}
上記メソッドのうち、create, editはAPI(JSON)ではなく、通常のView(HTML)を返します。
ルーティングを設定する。
<LaravelRoot>/routes/api.phpがWebAPI用のルーティングファイルです。こちらに先程のWebAPIのルーティングを以下のようにして設定します。
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
//-- ↓ルーティング設定を追加(Viewが返されるcreateとeditは除外する
Route::resource('users', 'Api\UserController')->except(['create','edit']);
最後にルーティングが設定されているか、確認します。
# cd <LaravelRoot>
# php artisan route:list
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------+---------------+-------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | api/users | users.index | App\Http\Controllers\Api\UserController@index | api |
| | POST | api/users | users.store | App\Http\Controllers\Api\UserController@store | api |
| | GET|HEAD | api/users/{user} | users.show | App\Http\Controllers\Api\UserController@show | api |
| | PUT|PATCH | api/users/{user} | users.update | App\Http\Controllers\Api\UserController@update | api |
| | DELETE | api/users/{user} | users.destroy | App\Http\Controllers\Api\UserController@destroy | api |
+--------+-----------+------------------+---------------+-------------------------------------------------+--------------+
データ取得を実装してみる。
コントローラーファイル(<LaravelRoot>/app/Http/Controllers/Api/UserController.php)のindex関数に以下のようなコードを追記します。
public function index()
{
$users = [
['id' => 1, 'name' => 'hoge'],
['id' => 2, 'name' => 'fuga'],
['id' => 3, 'name' => 'piyo'],
];
return $users;
}
ブラウザでhttps://<url>/api/usersにアクセスすると、結果が帰ってきます。
[{"id":1,"name":"hoge"},{"id":2,"name":"fuga"},{"id":3,"name":"piyo"}]
