私の API コンシューマーは、次のような顧客 HTTP ヘッダーを送信する必要があります。
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
次に、このヘッダーを before_filter メソッドで次のように読み取ることができます。
# app/controllers/api_controller.rb
class ApiController < ApplicationController
before_filter :log_request
private
def log_request
logger.debug "Header: #{request.env['HTTP_X_SOMEHEADER']}"
...
end
end
これまでのところ素晴らしい。動作に変更があるため、RSpec を使用してこれをテストしたいと思います。
# spec/controllers/api_controller_spec.rb
describe ApiController do
it "should process the header" do
@request.env['HTTP_X_SOMEHEADER'] = '123'
get :api_call
...
end
end
ただし、request
ApiController で受信した はヘッダー変数を見つけることができません。
HTTP_ACCEPT_LANGUAGE ヘッダーで を試すsame code
と、うまくいきます。カスタム ヘッダーはどこかでフィルタリングされていますか?
PS: Web に関するいくつかの例では、request
代わりに@request
. 現在の Rails 3.2/RSpec 2.14 の組み合わせの時点でどちらが正しいかはわかりませんが、どちらの方法も正しい動作をトリガーしませんが、どちらHTTP_ACCEPT_LANGUAGE
も同様に機能します。