🐰

【Rails API 】after_action で リクエスト, パラメーター, レスポンス を展開する

2024/04/19に公開

Rails で API を開発しています。
分析用に、API レスポンスやリクエストを加工してログテーブルに蓄積させる処理について備忘録として短いですがまとめます。

結論

  • after_action で request, params, response を切り出してログテーブルに蓄積させる
  • 上記処理を行う BaseController を作成し、各種 Controller はこれを継承する

after_action で request, params, response を切り出す

API レスポンスやリクエストなどを after_action 内で利用すること自体は難しくないです。
コードに落とし込むまでもないですが、request, params, response として取得することができます。

auth = request.headers["Authorization"] # request 利用例
response_body = response.body

# ~~~~(加工処理)~~~~
# なんか job とかで蓄積する
LogJob.perform_later(
  auth,
  params,
  response_body
)

BaseController を作成し、各種 Controller はこれを継承する

上記の処理を after_action で行う Controller を作成し、これを BaseController として各種 Controller に継承させます。

# base_controller.rb
class BaseController < ApplicationController
  
  after_action :put_log

  def put_log
    auth = request.headers["Authorization"] # request 利用例
    response_body = response.body
    
    # ~~~~(加工処理)~~~~
    # なんか job とかで蓄積する
    LogJob.perform_later(
      auth,
      params,
      response_body
    )
  end
end
# posts_controller.rb
class PostsController < BaseController
    # 処理
end

さいごに

今回の BaseController のような仕組みを作りたくて after_action 内で response などを利用する方法がわからずスパゲッティを作りかけたので、単純なことですが備忘録として残します

参考

https://api.rubyonrails.org/v7.1.3/classes/ActionDispatch/Response.html
https://api.rubyonrails.org/v7.1.3/classes/ActionDispatch/Request.html

Discussion