这里使用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']?
您可以通过::访问env
endpoint = @env["api.endpoint"]
我在非rails应用程序中尝试了这个并且它有效。您将获得变量中api端点的所有详细信息。
我意识到这已经有几年了,但是我们今天在生产中遇到了这个问题,这是因为标题中的“内容类型”没有设置为“application / json”。检查您的请求中发送的内容。
我无法弄清楚为什么,但我也能在use :<middleware_name>
评论我们的Grape::API
,我立即从葡萄中间件得到了"error": "The requested content-type 'text/plain' is not supported."
。