Masayan tech blog.

  1. ブログ記事一覧>
  2. 【Laravel】主なHttpレスポンスの生成方法と返し方

【Laravel】主なHttpレスポンスの生成方法と返し方

公開日

前置き

LaravelのHttpレスポンスの生成と返し方について解説していきたいと思います。
axiosなどでフロントエンドからApiを叩き、レスポンスを返すような想定で説明します。
(基本的には公式ドキュメントの流れで進めたいと思います)

バージョン

laravel8 ※バージョンによる差異はそこまでないかとは思いますが、念の為。

フロントエンド

/api/testというURLにgetリクエストを投げるとresponseが返ってくる想定です

const test = () => {
  axios
  .get("/api/test")
  .then((res) => {
    console.log(res.data);
  })
  .catch((error) => {
    console.log(error);
  });
};

レスポンスの生成と返し方

ざっくり分けると、配列を返す方法と、レスポンスインスタンスを返す方法があります(細かく分けると他にもあるようですが、今回は主要なもののみ記載しますので、割愛します)

1.配列を返す

配列を返す場合、以下のパターンがあります。

  • 純粋な配列を返す
  • Eloquentモデルやコレクションを返す

いずれも、Laravelフレームワークが自動的に配列をJSONレスポンスへ変換してくれるので、
特に意識することなく、Http通信することが可能です。

Eloquent ORMとは、Laravel独自のO/Rマッパーです。Laravelで提供されているデータ操作の為の機能であり、データベースとモデルを関連付け、柔軟なデータ操作を行う為の機能になります。ORMは、オブジェクト指向のプログラムとデータベースを繋ぐ「オブジェクト関係マッピング」を意味します。

JSONとは「JavaScriptのオブジェクト記法を用いたデータ交換フォーマット」です。 Python、PHP、JavaScript、C++、Javaなど様々な言語でサポートされており、JSONを間に挟むことで各プログラミング言語間のデータの受け渡しがとても簡単にできます。

純粋な配列を返す

純粋な配列($arr)を返しています

public function test()
{
  $arr = ['red' => '赤', 'yellow' => '黄色'];
  return $arr;
}

<返り値>
Array
Laravelフレームワークが自動的に配列をJSONレスポンスへ変換してくれるので、そのままフロントエンドでレスポンスを受け取って使用することができます(本来はjson_encode()でJSON化して受けわたす必要がある)

Eloquentモデルのコレクションを返す

modelクラスに対してall()やget()などのメソッドを使用すると返り値がコレクションで返ってきます。なお、コレクションはtoArrayメソッド使用することで容易に配列に変換することが可能です。

Eloquent が複数のレコードをリターンする場合、Illuminate\Database\Eloquent\Collection オブジェクトが返されます。Eloquentのコレクションはメモリを食うので、toArray()で配列にすると軽量化させることが可能です

use App\Models\RecipeSchedule; //カレンダーに登録したレシピ情報(RecipeScheduleモデル)

public function test()
{
  $recipeSchedule = RecipeSchedule::all(); // モデルに対してall()を実行すると、collectionインスタンスが返る
  return $recipeSchedule;
}

<返り値>
Collection

2.レスポンスインスタンスを返す

response()->json()でjsonレスポンス(Illuminate\Http\Response)を返しています
response()->json()を用いて、Responseインスタンスを返すことで、レスポンスをカスタマイズ(ヘッダー・cookieの添付)することが可能です。

public function test()
{
  $arr = ['red' => '赤', 'yellow' => '黄色'];
  return response()->json($arr);
}

<返り値>
JSON

まとめ

いかがでしたでしょうか。本記事では、LaravelのHttpレスポンスの生成と返し方について解説していきたいと思います。axiosなどでフロントエンドからApiを叩き、レスポンスを返すような想定において、どのようにLaravelを用いてバックエンドの部分のコードを書けばresponseを返すことができるのか、また、responseの種類などについて解説しています。