繁体   English   中英

如何在 Rails 中记录 API 请求?

[英]How to log API requests in Rails?

我有一个 Rails 应用程序,它在 /api/v1/...

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

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

为了上述评论者的利益,稍微扩展了一些解释,因为我只需要这样做。

  • 创建一个新模型来存储每个请求。 这个叫做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-only,所以我们从顶级 ApplicationController 继承

  • log_api_request方法创建了一个 ApiRequest 对象,正如上面 Carson 所建议的那样。
  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 请求,因为这不需要任何超出现有组件的附加组件。

创建一个新的日志类

ApiLog
  user_id:integer
  endpoint:string

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM