2017-04-19 7 views
0

私はSinatraベースのAPIを作成しており、APIキーを使用して特定のエンドポイントを保護し、ルートが処理される前にキーを検証します。前のブロックからJSON応答を返す方法

beforeブロックにエラーを投げが機能しない理由をbegin/rescue文はまだ呼び出されていないので、私はしかし、私はJSONレスポンスのようにエラーメッセージを表示して、クライアントに送信されるようにしたい、理解JSONオブジェクト

どうすればよいですか?

namespace '/v1/sponser/:key' do 

    before do 
    if APIHelper.valid_key?(params[:key]) == false 
     throw 'Error, invalid API key' 
     # is it possible to return a JSON response from the before statement here? 
    end 
    end 

    get '/test' do 
    begin 
     json status: 200, body: 'just a test' 
    rescue => error 
     json status: 404, error: error 
    end 
    end 

end 

答えて

1

私はhaltを使用して検討する:

before do 
    unless APIHelper.valid_key?(params[:key]) 
    halt 404, { 'Content-Type' => 'application/json' }, 
       { error: 'Error, invalid API key' }.to_json 
    end 
end 

get '/test' do 
    json status: 200, body: 'just a test' 
end 
0

あなたが特定のコード、ボディとヘッダとレスポンスを返すようにhaltメソッドを使用することができます。だから、これは次のようになります: before do halt 401, {'Content-Type' => 'application/json'}, '{"Message": "..."}' end それはちょうど別のURLにリダイレクトすることができるので、いくつかのサービスを提供するように見えます

関連する問題