在使用 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
我正在创建一个 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