在我的Rails 7应用程序中,我想为传入的请求实现幂等性。我认为这是一个使用Rack中间件进行此类操作的好例子。所以实现很简单:
class IdempotencyMiddleware
def initialize(app)
@app = app
end
def call(env)
if (key = env['HTTP_CE_IDEMPOTENCYKEY']).present?
return [200, { 'Content-Type' => 'application/json' }, ['']] if IdempotencyKey.exists?(key:)
IdempotencyKey.create!(key:)
end
@app.call(env)
end
end
# config/initializers/idempotency_middleware.rb
Rails.application.config.middleware.use IdempotencyMiddleware
我想检查传入的请求是否有ce-idempotencykey
。所以问题是-我应该检查HTTP_CE_IDEMPOTENCYKEY
还是只检查ce-idempotencykey
?我找不到任何相关的东西来解释我该走哪条路。
1条答案
按热度按时间cygmwpex1#
在Rack中间件的级别上,环境变量仍然是未转换的。请参阅Rack specification,特别是有关 *
HTTP_
变量 * 的部分。这意味着在Rack中间件中使用大写字符、下划线分隔的环境变量键名是绝对正确的。