ruby-grape / grape

An opinionated framework for creating REST-like APIs in Ruby.
http://www.ruby-grape.org
MIT License
9.86k stars 1.22k forks source link

Broken Params Type Check in Grape v2.1.x #2465

Closed ninoseki closed 3 weeks ago

ninoseki commented 3 weeks ago

I think Grape's params type check has been broken since v2.1.0.

require "grape"

module Test
  class API < Grape::API
    format :json

    params do
      requires :id, type: Integer
    end
    get "/:id" do
      params[:id]
    end
  end
end

run Test::API

Grape v2.0.0

$ curl localhost:9292/foo --verbose
* Host localhost:9292 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:9292...
* Connected to localhost (::1) port 9292
> GET /foo HTTP/1.1
> Host: localhost:9292
> User-Agent: curl/8.6.0
> Accept: */*
> 
< HTTP/1.1 400 Bad Request
< content-type: application/json
< Content-Length: 25
< 
* Connection #0 to host localhost left intact
{"error":"id is invalid"}

Grape v2.1.2

$ curl localhost:9292/foo --verbose
* Host localhost:9292 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:9292...
* Connected to localhost (::1) port 9292
> GET /foo HTTP/1.1
> Host: localhost:9292
> User-Agent: curl/8.6.0
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< x-cascade: pass
< Content-Length: 13
< 
* Connection #0 to host localhost left intact
404 Not Found

As you can see, v2.1.2 (v2.1+) does not handle the type checking the way it used to.

ninoseki commented 3 weeks ago

Sorry I overlooked this.