見出し画像

Railsで統一されたJSONレスポンスを返す方法:完全ガイド


手順


1. config/routes.rbの設定

まず、config/routes.rb ファイルに以下のコードを追加します。

Rails.application.routes.draw do
  resources :users
end


その後、ターミナルで以下のコマンドを実行してルートを確認します。

rails routes


期待される出力は次のようになります:

Prefix Verb   URI Pattern                                                                              Controller#Action
users  GET    /users(.:format)                                                                         users#index
       POST   /users(.:format)                                                                         users#create
user   GET    /users/:id(.:format)                                                                     users#show
       PATCH  /users/:id(.:format)                                                                     users#update
       PUT    /users/:id(.:format)                                                                     users#update
       DELETE /users/:id(.:format)                                                                     users#destroy


これでルートの関係が定義されました。

2. concerns/response.rbの作成

次に、統一されたレスポンスフォーマットを提供するためのモジュールを作成します。

app/controllers/concerns/response.rb ファイルを作成し、以下のコードを追加します。

module Response
  def render_response(data = nil, status: :ok, message: '操作成功', code: 0)
    render json: {
      code: code,
      message: message,
      data: data
    }, status: status
  end
end


3. application_controller.rbにモジュールを含める


次に、このモジュールをアプリケーションコントローラに含めます。

app/controllers/application_controller.rb ファイルに以下のコードを追加します。

class ApplicationController < ActionController::API
  include Response
end


4. users_controller.rbでrender_responseを呼び出す


続いて、UsersControllerで render_response メソッドを使用して、統一されたレスポンスを返すようにします。

app/controllers/users_controller.rb ファイルに以下のコードを追加します。

class UsersController < ApplicationController
  def index
    @users = User.all
    render_response(@users)
  end
end


5. ブラウザでlocalhost:3000/usersを入力


最後に、ブラウザで localhost:3000/users にアクセスします。これにより、index アクションが呼び出され、以下のようなJSONレスポンスが返されます。


{
    "code": 0, 
    "message": "操作成功", 
    "data": [
        {
            "id": 2, 
            "username": "jtp", 
            "password_digest": "$2a$12$.MBQdJZZ3iFJ9Bg1VZ.Hj.V2NReylH1G.ugCctKhF9jw185Uj20OG", 
            "created_at": "2024-06-26T02:20:40.477Z", 
            "updated_at": "2024-06-26T02:20:40.477Z"
        }
    ]
}


この方法を使用することで、アプリケーション全体で統一されたレスポンス形式を簡単に提供できます。


いいなと思ったら応援しよう!