1

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
4

1 に答える 1

1

私の知る限り、Rack でこれを行う慣用的な方法は、 yourenvをオブジェクトでラップして、など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
于 2013-03-17T03:56:03.550 に答える