There is difference when accessing the parameters data in Roda aplication between sending request with Content-Type: application/x-www-form-urlencoded and Content-Type: application/json.

When Sending POST Request with Content-Type: x-www-form-urlencoded

Use r.params['your_params'] to read your_params parameter value.

Example Request

curl -v -X POST --data "foobar=example_value" example.com/foo/bar

Example Roda Route

class Example
  route 'foo' do |r|
    r.post 'bar' do
      r.params['foobar'] # => example_value
    end
  end
end

When Sending POST Request with Content-Type: application/json

Use r.body.read to read the JSON body parameter and parse it with JSON parser.

Example Request

curl -v -X POST -H "Content-Type: application/json" -d '{"foobar":"example_value}' "example.com/foo/bar"

Example Roda Route

class Example
  route 'foo' do |r|
    r.post 'bar' do
      params = JSON.parse(r.body.read) # => {"foobar"=>"example_value"}
    end
  end
end