【问题标题】:Sending JSON Webhook Response发送 JSON Webhook 响应
【发布时间】:2017-11-03 04:06:20
【问题描述】:

我正在尝试通过 JSON 接收来自网络服务的请求,如果令牌正确,则发送成功的响应消息以及其他一些识别信息,否则发送正确的错误消息

post "/hook/foo/bar" do
puts request.env

if request.env['TOKEN'] === "secret_code"
  HTTParty.post("https://hook.com/hooks/catch/foo/bar/",
  {
    :body => @info.to_json,
    :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
  })

  [200, {}, "Success"]
else
  [400, {}, "Authorization Failed"]
end

发送钩子的服务(Zapier)说它发送成功,但我没有向他们响应任何我可以使用的有意义的数据。我认为我的回复格式是错误的,但我不确定如何。

【问题讨论】:

  • 不确定我是否理解正确,但您是否希望从您发出的 POST 请求中返回一些响应数据?

标签: json ruby sinatra httparty zapier


【解决方案1】:

来自 Zapier 平台团队的 David 在这里。

根据 sinatra docs,您可以返回:

一个包含三个元素的数组:[status (Fixnum), headers (Hash), response body (responds to #each)]

因此,您没有返回内容类型的任何提示,而是将字符串作为正文。这是有效的,你的钩子成功了,但你可以做得更好!

Zapier 将来自传出钩子的响应解析为 JSON,因此最好将其发回。

我刚刚测试了以下示例:

require 'sinatra'
require 'json'

get '/' do
  'hello world!'
end

post '/hook' do
  {message: 'great!'}.to_json
end

我的回复被解析了!

如果您想设置状态码,老实说,最简单的方法是在您返回之前随时使用函数status(400)。话虽如此,401 可能是您想要的 Unauthorized", rather than400 的代码。不过,无论哪种方式,zapier 都会将该运行标记为错误。

​如果您还有其他问题,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2018-10-11
    • 2022-09-25
    • 2016-09-13
    • 2013-11-24
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多