Ruby RestClient使用负载的GET请求

3

请帮我翻译以下内容: 我有很多应用程序和相关记录。

app with id 1 has: record1, record2 and record3.
app with id 2 has: record1 ... record1000 

为了过滤出应用程序1的记录,我使用curl。我可以使用以下命令获取记录:
curl -i -H "accept: application/json" -H "Content-type: application/json"  -X GET -d '{ "filters": { "app_id":"1" }}' http://[rails_host]/v1/records?token=[api_token]

我该如何使用ruby RestClient(gem 'rest-client' '1.7.2')实现同样的功能?

要获取所有记录,可以按以下步骤进行:

RestClient.get("http://[rails_host]/v1/records?token=[api_token]", { :content_type => 'application/json', :accept => 'application/json'})

问题在于应用程序id未返回,因此我无法解析响应并获取具有应用程序id = 1的记录。

有什么想法可以将负载添加到Restclient.get中以过滤记录吗?


使用GET请求体是一种不良设计。从技术上讲,您可以这样做,但为了符合规范,GET的主体不应以任何方式影响响应(因此,无论主体如何,相同的响应都应返回)。此外,许多人(因此,实现)认为GET请求不能具有重要性的主体,因此许多实现将不允许您发送主体。基本上:不要构建需要/使用请求主体数据的GET API。 - Joe
很遗憾,我并没有在构建一个应用程序。目前,我正在使用现有的应用程序,并尝试利用其现有功能创建持续集成解决方案。谢谢。 - Andriy
1个回答

9
您可以在这里的文档中看到,只有POST、PATCH和PUT这些高级别辅助函数接受有效负载参数。要使用有效负载进行GET请求,您需要使用RestClient::Request.execute
代码示例如下:
RestClient::Request.execute(
  method:  :get, 
  url:     "http://[rails_host]/v1/records?token=[api_token]",
  payload: '{ "filters": { "app_id":"1" } }',
  headers: { content_type: 'application/json', accept: 'application/json'}
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接