如何将 GET 请求的 JSON 主体映射到参数?
How do I map the JSON body of a GET request to a parameter?
我的端点中有以下定义:
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"}
如果我删除了参数要求,我可以在运行时手动检查参数散列并看到它只有一个键 "route_info"
我目前正在使用 Grape 0.7.0
发生这种情况是因为通过指定 -d
选项,您可以在请求正文中传递参数,而您的端点期望它们在路径中作为 url 的一部分。检查 here 为什么在 GET 请求中传递正文参数是个坏主意。
但是,可以使用该选项,但如果与 -G
结合使用。
-G, --get
When used, this option will make all data specified with -d, --data, --data-binary or --data-urlencode to be used in an HTTP GET request
instead of the POST request that otherwise would be used. The data will be appended to the URL with a '?' separator.
这样您使用 -d
的 get
请求将如下所示:
curl -XGET -G localhost/test
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-d '{ "entities": [{ "id": 3, "email": "test@abc.com" }] }'
我的端点中有以下定义:
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"}
如果我删除了参数要求,我可以在运行时手动检查参数散列并看到它只有一个键 "route_info"
我目前正在使用 Grape 0.7.0
发生这种情况是因为通过指定 -d
选项,您可以在请求正文中传递参数,而您的端点期望它们在路径中作为 url 的一部分。检查 here 为什么在 GET 请求中传递正文参数是个坏主意。
但是,可以使用该选项,但如果与 -G
结合使用。
-G, --get
When used, this option will make all data specified with -d, --data, --data-binary or --data-urlencode to be used in an HTTP GET request instead of the POST request that otherwise would be used. The data will be appended to the URL with a '?' separator.
这样您使用 -d
的 get
请求将如下所示:
curl -XGET -G localhost/test
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-d '{ "entities": [{ "id": 3, "email": "test@abc.com" }] }'