🐰
【Rails API 】after_action で リクエスト, パラメーター, レスポンス を展開する
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 などを利用する方法がわからずスパゲッティを作りかけたので、単純なことですが備忘録として残します
参考
Discussion