2017-06-01 76 views
0

我想接收通過JSON web服務的請求,併發送一個成功響應消息回來,如果令牌是一些其他標識信息一起正確,否則發送正確的錯誤信息發送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)表示它發送成功,但我沒有回覆任何有意義的數據給他們,我可以使用。我相信我的回覆格式是錯誤的,但我不知道如何。

+0

不知道我理解正確,但您是否期望從POST請求中返回一些響應數據請求? – Shiyason

回答

2

來自Zapier平臺團隊的David在這裏。

每屈docs,可以返回:

具有三個元素的數組:[狀態(Fixnum對象),報頭(散列),響應體(響應#each)]

所以你發送的內容類型和字符串都沒有提示。這是有效的,你的鉤子成功了,但你可以做得更好!

Zapier將來自傳出鉤子的響應解析爲JSON,因此最好將其發送回去。

我剛剛測試了以下例子:

require 'sinatra' 
require 'json' 

get '/' do 
    'hello world!' 
end 

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

,我的反應是解析! enter image description here

如果你想設置一個狀態碼,說實話,最簡單的方法是使用函數status(400)在返回之前的任何時候。這就是說,一個401可能是你想要的Unauthorized", rather than 400`的代碼。無論哪種方式,zapier都會將其標記爲錯誤。

讓我知道如果你有任何其他問題!