2018/05/11更新

[PHP] Laravel5.6で、サクッとRESTful APIを作成する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
PHPのWebフレームワークの1つであるLaravelでは、簡単にRESTfulAPIを作ることができます。今日はその作り方をブログに書きたいと思います。



目次




対象バージョン

今回はLaravelのv5.6以上を対象としています。以前のバージョンでもだいたい同じですが、一部コマンドが違うところもあるので、適宜読替えをお願いします。



RESTfulAPIとは

データベースに格納している1つ1つのモデルに対して、CRUD(Create / Read / Update / Delete)を提供する設計思想です。例えばユーザーテーブル(User)があったとして、それに対して以下のようなAPIを作成します。
# 一覧取得
GET /api/users

# IDを指定して1つ取得
GET /api/users/{id}

# 新規作成
POST /api/users

# 更新(PUTやPATCHが使われる)
PUT /api/users/{id}
PATCH /api/users/{id}

# 削除
DELETE /api/users/{id}
Webアプリケーションの役割はデータのCRUDを扱うことがほとんどなので、RESTfulなAPIをベースにサーバーを開発するとシンプルで分かりやすい実装ができます。

詳しくはGoogle検索(restful + api + とは)などで調べてみてください。



LaravelでRESTful APIを作成する

コントローラーの作成と、ルーティングの定義の2つの手順を行います。

コントローラーを作成する

artisanでコントローラーを作る際に--resourceパラメータをつけると、RESTfulに対応したControllerを作ることができます。
# RESTful API を満たすコントローラーを作る
$ php artisan make:controller OwnerController --resource
そうすると、以下のようにRESTfulに対応したメソッドを持つ、コントローラーが作成されます。
class OwnerController extends Controller {

    // 一覧取得.
    public function index() { }

    // 新規作成.
    public function store(Request $request) { }

    // 1件取得.
    public function show($id) { }

    // 更新.
    public function update(Request $request, $id) { }

    // 削除.
    public function destroy($id) { }

    // その他に、画面を表示するための「create」や「edit」も作成されるが、
    // ここでは省略.
}

ルーティングを定義する

続いてルーティングの定義です。routes/api.phpに以下の記載を追加します。
// ownersのREST APIを定義.
Route::resource('owners', 'OwnerController');
上記を記述したのちにphp artisan route:listを実行すると、ルーティングが追加されていることが確認できます。
# ルーティングの確認
$ php artisan route:list

+--------+-----------+-------------------------+----------------+----------------------------------------------+--------------+
| Domain | Method    | URI                     | Name           | Action                                       | Middleware   |
+--------+-----------+-------------------------+----------------+----------------------------------------------+--------------+
|        | GET|HEAD  | api/owners              | owners.index   | App\Http\Controllers\OwnerController@index   | api          |
|        | POST      | api/owners              | owners.store   | App\Http\Controllers\OwnerController@store   | api          |
|        | GET|HEAD  | api/owners/{owner}      | owners.show    | App\Http\Controllers\OwnerController@show    | api          |
|        | PUT|PATCH | api/owners/{owner}      | owners.update  | App\Http\Controllers\OwnerController@update  | api          |
|        | DELETE    | api/owners/{owner}      | owners.destroy | App\Http\Controllers\OwnerController@destroy | api          |
+--------+-----------+-------------------------+----------------+----------------------------------------------+--------------+

※必要ないルーティングの表示は省略しています
これでRESTful APIの定義を行うことができました。



試しに動かしてみる

php artisan serveでサーバーを起動します。

例えばOwnerController.phpindex()メソッドで、以下のように実装してみます。
public function index() {
    return response()->json([
        [ 'name' => 'Yohei' ]
    ]);
}
そしてAPIを実行してみると、レスポンスが返ってくることが確認できます。
$ curl http://localhost:8000/api/owners

[{"name":"Yohei"}]
あとは、コントローラーの中を要件に合わせて実装すれば、APIは完成です。



参考までに

APIの開発ではGET以外に、POSTPUTなどのHTTPメソッドを使う必要があります。ブラウザやターミナルからの実行は面倒なので、Postmanという開発支援ツール(無料)を使うと便利です。

https://www.getpostman.com/



最後に

Laravelで何個かアプリを作ろうかなーと思って、色々と実装しています。実装で調べたことは都度ブログに書けたらいいなぁ〜。

最後になりますが本ブログでは、PHP、フロントエンド、サーバー、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。