Как проверить параметры заголовка с помощью Sinatra?

Я работаю над простым API с Sinatra, и у меня есть такой маршрут:

get '/api/v1/invoice/:biller', :provides => [:json] do
   respond_with invoice( request )
end

Это работает как талисман, когда я не отправляю параметры заголовка, но когда я отправляю:

  • принимать
  • Тип содержимого

Тогда я получил 404 Not Found ошибка и классическая ошибка Синатры: "Синатра не знает эту пустышку".

Как я могу проверить определенные параметры заголовка на Синатре?

редактировать

Это фактический заголовок (Accept) с примером curl:

curl -H "Accept: application/vnd.tpago.billpayment+json" -X GET "http://localhost:3540/api/v1/invoice/5947647"

Спасибо!

2 ответа

Решение

Если вы измените свой запрос на:

curl -H "Accept: application/json" -X GET "http://localhost:3540/api/v1/invoice/5947647"

Он будет работать так, как предлагает Нейл, или если вы измените приложение Sinatra на:

configure do
  # include new mime type
  mime_type :tpago, 'application/vnd.tpago.billpayment'
end

# add into provide options
get '/api/v1/invoice/:biller', :provides => [:tpago,:json] do
   respond_with invoice( request )
end

Теперь будет работать следующий запрос:

curl -H "Accept: application/vnd.tpago.billpayment" -X GET "http://localhost:3540/api/v1/invoice/5947647"

Я не совсем уверен, но я думаю, что знак "+" не работает на Accept заголовок. Я не нашел упоминаний об этом в документации w3.

Спасибо Тлевин!

Я применил ваше решение, но затем обнаружил проблему с "response_with". Это всегда возвращало 408 Not Acceptable поэтому я пошел к документации Синатры, поэтому я использовал response_to:

get '/api/v1/invoice/:biller', :provides => [:tpago,:json] do
  result = invoice( request )
  respond_to do |f|
    f.on('application/vnd.tpago.billpayment+json') { result.to_json }
  end
end

И теперь это работает!:D

Еще раз спасибо!

Другие вопросы по тегам