这里使用Grape write API函数。我想要限制API(API速率限制)。
LIB /葡萄/扩展/ grape_extension.rb
module Grape
module Extension
module ThrottleExtension
def throttle(options={})
route_setting :throttle, options
options
end
Grape::API.extend self
end
end
end
LIB /葡萄/中间件/ throttle_middleware.rb
module Grape
module Middleware
class ThrottleMiddleware < Grape::Middleware::Base
def before
binding.pry
end
end
end
end
LIB / grape_throttle.rb
require 'grape'
require 'grape/extensions/throttle_extension'
module Grape
module Middleware
autoload :ThrottleMiddleware, 'grape/middleware/grape_middleware'
end
end
最后,在config/application.rb
require File.expand_path('../../lib/grape_throttle', __FILE__)
config.middleware.use Grape::Middleware::ThrottleMiddleware
并且,当我使用rails s
运行并调用api时,binding.pry已调用。
[1] pry(#<Grape::Middleware::ThrottleMiddleware>)> env['api.endpoint']
=> nil
我想知道如何在Grape中间件中访问env ['api.endpoint']?
答案 0 :(得分:0)
您可以通过::
访问env
endpoint = @env["api.endpoint"]
我在非rails应用程序中尝试了这个并且它有效。 您将获得变量中api端点的所有详细信息。
答案 1 :(得分:0)
我意识到这已经有几年历史了,但是今天我们在生产中遇到了这个问题,这是因为标头中的“内容类型”未设置为“ application / json”。对照您发送的请求进行检查。
我无法弄清楚为什么,但是我也能够在use :<middleware_name>
中注释掉我们的Grape::API
,我立即从葡萄中间件中得到了"error": "The requested content-type 'text/plain' is not supported."
。