【问题标题】:Ruby RestClient GET request with payload带有有效负载的 Ruby RestClient GET 请求
【发布时间】:2017-09-24 03:43:28
【问题描述】:

请帮我解决以下问题: 我有许多申请和相关记录。

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 的 body 是一个糟糕的设计。从技术上讲,您可以这样做,但要满足规范,GET 的主体不应影响响应(因此无论主体如何,都应返回相同的响应)。此外,许多人(因此,实现)认为 GET 请求不能有重要的主体,因此许多实现不允许您发送主体。基本上:不要构建 GET 需要/使用请求正文中的数据的 API。
  • 不幸的是,我没有构建应用程序。目前,我使用现有的,并尝试使用现有功能创建持续集成解决方案。谢谢

标签: ruby rest-client


【解决方案1】:

您可以在文档here 中看到,接受有效负载参数的唯一高级助手是 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'}
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2016-12-15
    相关资源
    最近更新 更多