Rails で 有効なエンドポイントを出したい
Rails で有効なエンドポイントを列挙したい
叩かれなくなっているエンドポイントを見つけたい。 そのためにアクセスログとアプリケーションの有効なエンドポイントとを突き合わせるとよさそう。 そこで有効なエンドポイントの列挙方法を調べた。
実行するコードと出力
異なるアクセスログの形式に対応できるように 2 通りで出す。
verb path の配列を取得するケース
Rails.application.routes.routes.reject(&:internal).collect do |route| next unless route.requirements[:controller] && route.requirements[:action] "#{route.verb} #{route.path.spec.to_s.sub(/\(.*\)/, "")}" end.compact
これを実行すると下記のような配列が取得できる。
path 中の :
から始まっているところは正規表現に置き換えてあげればよい。
=> ["GET /users/sign_in", "POST /users/sign_in", "DELETE /users/sign_out", "GET /users/password/new", "GET /users/password/edit", ... "PATCH /rails/conductor/action_mailbox/inbound_emails/:id", ... "POST /rails/active_storage/direct_uploads"]
controller#action の配列を取得するケース
Rails.application.routes.routes.reject(&:internal).collect do |route| next unless route.requirements[:controller] && route.requirements[:action] "#{route.requirements[:controller]}##{route.requirements[:action]}" end.compact
これを実行すると下記のような配列が取得できる
=> ["devise/sessions#new", "devise/sessions#create", "devise/sessions#destroy", "devise/passwords#new", "devise/passwords#edit", ... "active_storage/direct_uploads#create"]