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"
}
]
}
この方法を使用することで、アプリケーション全体で統一されたレスポンス形式を簡単に提供できます。