如何在Rails中记录API请求?

时间:2014-05-13 00:12:58

标签: ruby-on-rails api logging

我有一个Rails应用程序,它的API位于/ api / v1 /...

我希望能够记录对API完成的所有请求,并且我知道它们在日志文件中,但是有没有替代方法可以永久存储所有请求?

你如何在Rails中处理这个问题?

2 个答案:

答案 0 :(得分:1)

为使上面的评论者受益,请稍作扩展,因为我只需要这样做。

  • 创建一个新模型来存储每个请求。这个叫做ApiRequest
class CreateApiRequests < ActiveRecord::Migration[5.2]
  def change
    create_table :api_requests do |t|
      t.belongs_to :api_key
      t.string :endpoint
      t.string :remote_ip
      t.json :payload
      t.datetime :created_at
    end
  end
end
  • 在每个API控制器中使用“ before_action”过滤器来调用一个方法,该方法将创建一个新的ApiRequest条目并将其存储。
module Api
  module V2
    class SomeController < ::ApplicationController

      before_action :log_api_request

      <controller methods>

我们的应用程序仅适用于API,因此我们从顶级ApplicationController继承

  • 方法log_api_request创建一个Carpi上面建议的ApiRequest对象。
  def log_api_request
    ApiRequest.create(
      api_key: api_key,
      endpoint: request.fullpath,
      remote_ip: request.remote_ip,
      payload: params,
      created_at: Time.now.iso8601
    )
  end

要点是通过从控制器方法中一致地调用create来创建自己的数据库表/模型来记录API请求,因为除现有功能外,不需要任何其他组件。

答案 1 :(得分:0)

创建一个新的日志记录类

ApiLog
  user_id:integer
  endpoint:string

在控制器端点中,为每个请求创建一个日志条目。

Api::v1::SomethingController
  def index
    ApiLog.create(endpoint: 'Something: Index'
    ....
  end

在所有必需的API控制器中继续进行此操作。标记端点后,您可以在任何时间范围内按端点对任何特定用户进行ApiLog查询。 ApiLog的created_at属性将用作接收API请求的时间。