tutorial español ruby sinatra rack

ruby - español - ¿Cómo analizar el cuerpo de solicitud JSON en Sinatra solo una vez y exponerlo a todas las rutas?



sinatra ruby github (3)

Como este trabajando para sinatra 1.4.5.

before do if request.body.size > 0 request.body.rewind @params = ActiveSupport::JSON.decode(request.body.read) end end

Estoy escribiendo una API y recibe una carga JSON como el cuerpo de la solicitud.

Para llegar a eso actualmente, estoy haciendo algo como esto:

post ''/doSomething'' do request.body.rewind request_payload = JSON.parse request.body.read #do something with request_payload body request_payload[''someKey''] end

¿Cuál es una buena manera de abstraer esto para que no tenga que hacerlo para cada ruta? Algunas de mis rutas son más complicadas que esto y, como resultado, la solicitud. Todo el mundo se volvería a leer y volver a analizar varias veces por ruta con este método, que quiero evitar.

¿Hay alguna manera de hacer que la solicitud_payload sea mágicamente disponible para las rutas? Me gusta esto:

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



Use un sinatra antes de manejador:

before do request.body.rewind @request_payload = JSON.parse request.body.read end

esto lo expondrá al controlador de solicitud actual. Si desea que esté expuesto a todos los manejadores, póngalo en una superclase y extienda esa clase en sus manejadores.