[英]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
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.