使用带有Rails的Webhooks

Lui*_*igi 13 ruby-on-rails webhooks

我不熟悉Webhooks,但我觉得它们对我的应用程序来说是正确的.

我有FluidSurveys webhook的以下文档

我理解如何通过POST对他们的请求制作webhook API,但我不知道如何判断webhook实际发送响应的位置.我可以通过我想要的任何订阅网址吗?例如https://www.myapp.com/test,那是webhook发送数据的地方?此外,webhook创建后,我不知道如何确保我的Rails应用程序将收到启动的响应.我假设一个控制器方法与我提供给webhook的url相对应.

如果我在处理webhook的控制器上是正确的,那会是什么样子?

任何指导表示赞赏.

lip*_*ski 61

Webhooks 通过您提供的回调URL 挂钩到您的应用程序.这只是您的一个控制器中的一个操作,它响应POST请求并处理webhook请求.每次更改远程服务时,远程服务都会向您提供的回调URL发出请求,从而触发操作代码.

我将通过调查创建事件来举例说明.首先,为此事件定义一个回调操作,您可以在其中处理来自webhook的请求.如前所述这里的网络挂接与以下身体反应:

survey_creator_name=&survey_name=MADE+A+NEW+SURVEY&survey_creator_email=timothy@example.com&survey_url=http%3A%2F%2Fexample.com%2Fsurveys%2Fbob%2Fmade-a-new-survey%2F``
Run Code Online (Sandbox Code Playgroud)

我们暂时离开标题,它们不包含重要信息.可用的身体参数(survey_creator_name,survey_name等)将反映有关对远程服务提供的新调查的所有细节.所以让我们编写一个处理此请求的回调操作:

class HooksController

  def survey_created_callback
    # If the body contains the survey_name parameter...
    if params[:survery_name].present?
      # Create a new Survey object based on the received parameters...
      survey = Survey.new(:name => params[:survey_name]
      survey.url = params[:survey_url]
      survey.creator_email = params[:survey_creator_email]
      survey.save!
    end

    # The webhook doesn't require a response but let's make sure
    # we don't send anything
    render :nothing => true
  end

end
Run Code Online (Sandbox Code Playgroud)

让我们为此添加路径(in config/routes.rb):

scope '/hooks', :controller => :hooks do
  post :survey_created_callback
end
Run Code Online (Sandbox Code Playgroud)

这将启用该POST /hooks/survey_created_callback路线.

现在,您需要将此回调URL订阅到Webhooks API.首先,您需要知道哪些挂钩可供您使用.您可以通过发出GET请求来执行此操作/api/v2/webhooks/.在响应中,您将找到事件名称,调查收集器参数.

最后,通过向URL 发出包含以下内容的请求,您订阅了之前列出的一个钩子POST /api/v2/webhooks/subscribe/:

{
  "subscription_url": "http://your-absolute-url.com/hooks/survey_created_callback",
  "event": "[EVENT NAME FROM THE HOOKS LIST]",
  "survey": "[SURVEY FROM THE HOOKS LIST]",
  "collector": "[COLLECTOR FROM THE HOOKS LIST]"
}
Run Code Online (Sandbox Code Playgroud)

201如果成功创建了挂钩,则对此的响应将是代码409,如果已存在相同回调URL的webhook,则对代码进行响应.或者其他什么,如果这变坏了:)

您现在可以通过在远程服务上创建调查来测试挂钩,然后观察它在Rails应用程序中的复制.

希望这可以帮助...

  • 很有帮助.如果可以的话,+ 100,谢谢! (3认同)