在使用 rest-client gem 发出的请求中发送一个字符串数组

Sending an array of string in a request made with rest-client gem

我正在创建一个 gem 来实现 Calendly API 并且我需要发出类似

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

创建网络钩子。

如您所见,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}" })

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

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

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

RestClient 将为您适当地序列化原生 ruby 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