Как проверить параметры заголовка с помощью 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
Еще раз спасибо!