Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Checking request body in Grape API

Tags:

grape-api

I have a line like this in my Grape endpoint to check the contents of the POST body, to provide a testing endpoint:

return 'OK' if request.body.string == 'TEST'

In my development environment on my laptop, this works just fine. In our staging and production environments, however, it throws an exception:

NoMethodError: undefined method `string' for #<Unicorn::TeeInput:0x0000000b0d0290>

From what I can find this has to do with Rack, but I'm pretty surprised to find different behavior from middleware between two environments. I wondered if anyone out there has run across this and might have a suggestion, because I see that Unicorn::TeeInput doesn't have an easy way to check the contents, seemingly. I'm hoping that perhaps there's an "official" way to directly access the request body in Grape, but I haven't found one yet.

Thanks for any ideas.

like image 376
Masonoise Avatar asked Aug 05 '26 16:08

Masonoise


1 Answers

Try using env['rack.input'], which should return an input stream (actually a Rack::Lint::InputWrapper or workalike) from which you can read the request body:

return 'OK' if env['rack.input'].gets.eql? 'TEST'

I've tested this and it works locally using both WEBrick and Unicorn.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!