我的终端中有以下定义:
params do
requires :entities do
requires :id, type: String
optional :email, type: String
optional :phone, type: String
end
end
post "test" do
end
请注意,这仅作为POST请求,以下CURL将起作用:
curl -XPOST localhost/test
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-d '{ "entities": [{ "id": 3, "email": "test@abc.com" }] }'
但是,当我将声明更改为“test”而不是post时,由于以下验证错误,使用-XGET的相应curl请求不再起作用:
{"error":"entities is missing"}
如果删除params要求,我可以在运行时手动检查params散列,看看它只有一个键“route_info”
我目前正在使用Grape 0.7.0
答案 0 :(得分:1)
之所以发生这种情况,是因为通过指定-d
选项,您可以在请求正文中传递参数,而您的端点期望它们在路径中作为URL的一部分。检查here为什么在GET请求中传递body参数是个坏主意。
但是,如果与-G
组合使用,则可以使用该选项。
-G, - get
使用时,此选项将使用-d, - data, - data-binary或--data-urlencode指定的所有数据在HTTP GET请求中使用 而不是否则将使用的POST请求。数据将通过'?'附加到网址上。分离器。
使用get
的{{1}}请求如下所示:
-d