Laravel 5.4 でAPIを作成する方法

LaravelのAPIのeditメソッドをAjaxで呼んだ時に、サーバー側はidしか取れないのかなと悩みましたが、そんなことはなかったので、それだけ説明するつもりでしたが、気が付いたらLaravel APIの実装全体に触れた記事になっていました。
  1. LaravelのAPI設計思想について
  2. artisanコマンドで作成したAPIを紐づける
  3. LaravelのRoute::resouceについて
  4. LaravelのAPIの呼び方
  5. クライアント側からLaravelのAPIを呼ぶ
  6. editメソッドでID以外のデータ欲しいよ!

LaravelのAPI設計思想について

Laravel5.4では、決まりに沿った呼び方をしないと、思った通りに動いてくれません。その決まりはRESTという概念に基づいてRESTfulで設計されているというらしいという理解でLaravelのAPIを作ると良いということで、php artisan make:controller FooVarController --resourceartisanコマンドを打てば、Laravelでお勧めのRESTAPIを作ってくれます。すごーい。artisanコマンドは、プロジェクトのルートでたたきましょう。appの1個上のディレクトリですね!

artisanコマンドで作成したAPIを紐づける

artisanコマンドでAPIを作成したら、Routes.phpでAPIとの紐づけを行います。 ※php artisan make:controller FooVarController --resourceでファイル作成することが前提です。

LaravelのRoute::resouceについて

Route::resourceというメソッドですが、これは、Laravelで規定されたCRUDのメソッドを一気にルーティングしてくれます。index,create,store,show,edit,update,destroyがLaravelで規定されたCRUDのメソッドだと思っています。コントローラーがこれらのメソッドを持っていれば、一気にルーティングしてくれるんですね。ただ、罠があって、Laravelで規定されたCRUDのメソッドが1個でもかけると、そのメソッドを呼ばれた時に例外が出るそうです。なので、使わないメソッド以外を定義する方法と、使うメソッドを定義する方法があります。 こんな感じになります。

LaravelのAPIの呼び方

というわけで、いよいよAPIの呼び方です。どーやって呼ぶのかは、php artisan route:listを叩くと分かります。 結果はこのようになるので、それぞれのメソッドを呼ぶときは、下記のようになります。
HTTP URI 呼ばれるメソッド
POST http://example.com/public/api/article FooVar@store
GET http://example.com/public/api/article FooVar@index
GET http://example.com/public/api/article/create FooVar@create
DELETE http://example.com/public/api/article/11
11は仮番号なので、何番でも構いませんし数字じゃなくても良いです。
FooVar@destroy
PUT http://example.com/public/api/article/11
11は仮番号なので、何番でも構いませんし数字じゃなくても良いです。
FooVar@update
GET http://example.com/public/api/article/11
11は仮番号なので、何番でも構いませんし数字じゃなくても良いです。
FooVar@show
GET http://example.com/public/api/article/11/edit
11は仮番号なので、何番でも構いませんし数字じゃなくても良いです。
FooVar@edit
Getで呼べるものは、ブラウザにURI入力して確認できます。取り急ぎの動作確認がしたい場合は、これで確認してみてはどうでしょう。

クライアント側からLaravelのAPIを呼ぶ

クライアント側からいよいよAPIを呼びますが、AjaxのパラメータにCSRFTOKENをヘッダに含めないとHTTPのステータスコード419のエラーになります。 ※追記2017/12/20 JSONデータとしてサーバに送れないので記事追記しました。

editメソッドでID以外のデータ欲しいよ!

Laravelのartisanコマンドで出力したAPIファイルには、storeとupdateにしかデフォルトだと、Ajaxからデータが渡ってきません。例えばeditメソッドでデータが欲しい場合には、パラメータにRequest $requestを加えます。 せっかくなので全部載せておきます!

おわりに

Laravelは勉強すれば勉強するほど、柔軟なフレームワークになっていく感じがしますね!フレームワークを利用したWebシステムの開発、スクラッチで行うWebシステムの開発、WordPressでのWebサイト構築、アクセスアップなどでお手伝いできる案件があれば、是非テクノブレイブ名古屋オフィス開発1グループにご連絡下さい!
料金表ナビゲーション 料金表ナビゲーション

おすすめ記事