我有一个Rails应用程序,它的API位于/ api / v1 /...
我希望能够记录对API完成的所有请求,并且我知道它们在日志文件中,但是有没有替代方法可以永久存储所有请求?
你如何在Rails中处理这个问题?
答案 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
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请求的时间。