在使用rest-client gem

时间:2017-01-04 19:00:45

标签: ruby request rest-client

我正在创建一个gem来实现Calendly API,我需要发出像

这样的请求
curl --header "X-TOKEN: <your_token>"
     --data "url=https://blah.foo/bar&events[]=invitee.created"
     https://calendly.com/api/v1/hooks

创建一个webhook。

正如您所看到的,events作为字符串数组传递,这由[]表示。

我正在尝试使用RestClient::Request#execute发送此请求,但在这种情况下我不知道如何传递此字符串数组。

我试过

RestClient::Request.execute(method: :post,
                            url: @uri,
                            params: { url: url,
                                      events: "invitee.#{type}"
                                    },
                            headers: { "X-TOKEN": "#{@api_key}" })

但是我没有像API期望的那样发送数组。

我也试过

RestClient::Request.execute(method: :post,
                            url: @uri,
                            params: { url: url,
                            'events[]': "invitee.#{type}" },
                            headers: { "X-TOKEN": "#{@api_key}" })

但它也没有用。我得到了一个错误的请求错误,没有别的。

在这种情况下我应该如何构建我的请求?

1 个答案:

答案 0 :(得分:2)

发布了可见性(之前已在评论中回答)

RestClient将适当地序列化原生红宝石Array,意味着

events: ["invitee.#{type}"]

将序列化为events[]=invitee.created type == 'created'。这适用于具有多个值的Array

events: ["more","than","one"]

将转换为events[]=more&events[]=than&events[]=one

最后,它还处理Array内的其他数据类型,例如另一个Hash

events: [{first_name: 'Zaphod', last_name: 'Beeblebrox'}]

将成为events[][first_name]=Zaphod&events[][last_name]=Beeblebrox