39

私は API を作成しており、リクエストの本文として JSON ペイロードを受け取ります。

現在それを取得するために、私は次のようなことをしています:

post '/doSomething' do
    request.body.rewind
    request_payload = JSON.parse request.body.read

    #do something with request_payload
    body request_payload['someKey']
end

ルートごとに行う必要がないように、これを抽象化する良い方法は何ですか? 私のルートのいくつかはこれよりも複雑であり、その結果、request.body はこのアプローチでルートごとに数回再読み込みおよび再解析されますが、これは避けたいと考えています。

request_payload を魔法のようにルートで利用できるようにする方法はありますか? このような:

post '/doSomething' do
    #do something with request_payload, it's already parsed and available
    body request_payload['someKey']
end
4

5 に答える 5

9

Rack Middleware を使用して解析することもできます。https://github.com/rack/rack-contribを参照use Rack::PostBodyContentTypeParserしてください Sinatra クラスを初期化するときだけ。

于 2016-01-11T20:45:54.590 に答える