我正在使用Sinatra开发一个简单的API,我有一条像这样的路线:
get '/api/v1/invoice/:biller', :provides => [:json] do
respond_with invoice( request )
end
当我不发送任何标题参数时,它就像一个魅力,但当我发送:
然后我收到404 Not Found
错误,经典的Sinatra错误'Sinatra不知道这个小曲'。
如何验证Sinatra上的特定标题参数?
修改
这是带有curl示例的实际标题(Accept):
curl -H "Accept: application/vnd.tpago.billpayment+json" -X GET "http://localhost:3540/api/v1/invoice/5947647"
谢谢!
答案 0 :(得分:3)
如果您将请求更改为:
curl -H "Accept: application/json" -X GET "http://localhost:3540/api/v1/invoice/5947647"
它可以像Neil建议的那样工作,或者如果你修改你的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文档中没有找到任何关于它的参考。
答案 1 :(得分:0)
谢谢你!
我应用了您的解决方案但后来发现了'respond_with'的问题。它总是返回408 Not Acceptable
所以我去了Sinatra's documentation,所以我使用了respond_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
再次感谢你!