Rest 在Sinatra中,如何使过滤器依赖于请求方法?
我在Sinatra中使用了文档中声明的过滤器:没有匹配字符串、匹配字符串或匹配regexp。到目前为止,它一直运转良好。现在,我有一个特殊的用例。假设我有一条路线:Rest 在Sinatra中,如何使过滤器依赖于请求方法?,rest,sinatra,Rest,Sinatra,我在Sinatra中使用了文档中声明的过滤器:没有匹配字符串、匹配字符串或匹配regexp。到目前为止,它一直运转良好。现在,我有一个特殊的用例。假设我有一条路线: /resources/1 根据REST,根据请求方法的不同,这可以是GET方法、PUT方法或DELETE方法。第一个问题是:如何编写只在GET请求时调用的过滤器?(目前我让所有的方法都被过滤,然后我才测试这个方法。它是有效的,但我不喜欢它)。第二个问题,也是更重要的一个问题:假设这样的PUT请求被触发: /resources/
/resources/1
根据REST,根据请求方法的不同,这可以是GET方法、PUT方法或DELETE方法。第一个问题是:如何编写只在GET请求时调用的过滤器?(目前我让所有的方法都被过滤,然后我才测试这个方法。它是有效的,但我不喜欢它)。第二个问题,也是更重要的一个问题:假设这样的PUT请求被触发:
/resources/
这当然是错误的,因为PUT请求没有关联的资源id。我想知道西纳特拉是否有什么东西能让我做这样的事情:
before "/resources/", :method => :put do
error_message
end
只是这种可能性不存在(在只接受一个参数之前)。我怎样才能达到最好的效果呢?实际上,是过滤器。不过,您不必使用条件,您可以在筛选器中使用条件:
before "/path/" do
if request.request_method == "PUT"
# do something
end
end
如果你想使用一个条件,我想你需要写一个,也许像这样:
set(:accepted_verbs) {|*verbs|
condition {
verbs.any?{|v| v == request.request_method }
}
}
before "/path/", :accepted_verbs => ["GET","POST"] do
# do something
end
before "/path/", :accepted_verbs => ["PUT"] do
# do something else
end
有关详细信息,请参阅。很抱歉,答复太晚。我实际上使用了你的建议,但没有定义诸如get?、post?等helpers方法。。。但它基本上进入了request_方法var。