簡単な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"}]