たった3ステップ!Laravel 5.6でRESTful API

こんにちは。フリーランス・コンサルタント&エンジニアの 九保すこひ です。

現在の開発で簡単なRESTful APIの開発をしているのですが、Laravelを使うと驚くほど簡単に(作業を省略して)実装をすることができます。

そこで、今回はLaravel 5.6 を使って、

  • 閲覧
  • 追加
  • 編集
  • 削除

ができるAPIを作成する3ステップを紹介したいと思います。

前提

すでにUserというモデルが作成済みという前提で話を進めます。

1.コントローラー作成

Laravelにはコントローラーを自動作成するコマンドがありますが、実はこのコマンドにオプション・パラメータを追加するだけで、RESTful APIに必要な基本コードを準備することができます。

php artisan make:controller UserController --resource --model=User

説明としては、

  • –resource ・・・ API用のメソッドを自動で記述
  • –model=***** ・・・ さらに各メソッドにモデルのインスタンスを準備してくれる

実際の中身としてはこうなります。

<?php

namespace App\Http\Controllers;

use App\User;
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  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function edit(User $user)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, User $user)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\User  $user
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        //
    }
}

注目すべきところは、すでに $user が該当するユーザーのインスタンスになっているところです。通常ならIDなどからユーザー情報を取得して、そこから・・・・・・という具合にひと手間いりますけど、この辺もさすがはLaravelです。

2.ルートを作成

いつものように web.php でアクセスするURLを設定しますが、これもRESTful APIの専用の記述が用意されていて、以下のようにするだけです。

Route::resource('users', 'UserController');

つまり、たった一行記述するだけで、以下6つのメソッドにアクセスすることができるようになるわけです。

  • index
  • create
  • store
  • edit
  • update
  • destroy

URLとしては、

(GET) /users
(GET) /users/create
(POST) /users
(GET) /users/{user}
(GET) /users/{user}/edit
(PUT) /users/{user}
(DELETE) /users/{user}

です。

※注: {user}は、userのIDが入ります。

さらに、全てのメソッドが必要ではない場合は以下のようにすれば、制限をすることができます。(show, store, update の3つだけ使う場合)

Route::resource('users', 'UserController', [
    'only' => ['show', 'store', 'update']
]);

3.各メソッドの中身を記述

さぁ、あとはデータベースからレコードを取得したり、保存したりする記述を開発内容に沿って追加していくだけでOKです。

ちなみに私の場合、処理がうまく言ったかどうかを {result: true} のような形でJSONで返すことが多いです。

今のLaravelはここも記述がとても簡単で、単に配列を返すだけで自動でJSON化してくれます。

return ['result' => $result];

Laravelの便利さはどこまで行くのでしょうか!?(笑)

ちなみに

たとえば、AJAXをつかってデータへのアクセスをする場合、たまに一気に「削除したいなー」なんて思うことがあります。いわゆる bulk delete というやつですね。

そんな場合私は、ルートに

Route::post('destroy_all', 'UserController@destroyAll');

という具合に一気に削除するメソッドを追加して送信されたIDから該当するデータを削除しています。

これって、これまでいろいろ探しましたけど仕様としてきちっと決まっていないようなんですよね。ルートがひとつだけ整頓されてなくて、スタイリッシュじゃないですけど、この辺は仕方ないのかもしれませんね。

と、いうことで今回はLaravel 5.6 を使ったRESTful APIの作成方法でした。
ではでは!

このエントリーをはてなブックマークに追加       follow us in feedly  
開発のご依頼お待ちしております
開発のご依頼はこちらから: お問い合わせ
どうぞよろしくお願いいたします! by 九保すこひ