要在Rack中响应json响应,我可以执行以下操作。如何根据请求是GET请求还是PUT请求以及PUT请求附带的数据返回不同的响应?也就是说,从env
变量检查请求并处理各种情况的惯用方法是什么?
require 'json'
class Greeter
def call(env)
[200, {"Content-Type" => "application/json"}, [{x:"Hello World!"}.to_json]]
end
end
run Greeter.new
答案 0 :(得分:1)
据我所知,在Rack中执行此操作的惯用方法是将env
包裹在Rack::Request
对象中并致电get?
,post?
,等
这是一个简单的例子:
# config.ru
run(Proc.new do
req = Rack::Request.new(env)
response = <<-RESP
get? #{req.get?}
post? #{req.post?}
RESP
[200, {"Content-Type" => "text/plain"}, [response]]
end)
以下是如何检查它的实际效果:
$ curl http://localhost:9292
get? true
post? false
$ curl --data "" http://localhost:9292
get? false
post? true