ruby-on-rails – 使用Webhooks与Rails

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

我有FluidSurveys webhook的以下文档

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

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

任何指导都不胜感激.

解决方法

Webhook通过您提供的回调URL挂接到您的应用程序.这只是您的一个控制器中的响应POST请求并处理webhook请求的操作.每当远程服务发生变化时,远程服务会向您提供的回调URL发出请求,从而触发操作代码.

我将以调查创建的事件为例.您首先为此事件定义一个回调操作,您可以处理来自webhook的请求.如here所述,webhook响应以下机构:

survey_creator_name=&survey_name=MADE+A+NEW+SURVEY&survey_creator_email=bob@example.com&survey_url=http%3A%2F%2Fexample.com%2Fsurveys%2Fbob%2Fmade-a-new-survey%2F``

现在让我们离开标题,它们不包含重要的信息.可用的身体参数(survey_creator_name,survey_name等)将反映关于远程服务上可用的新调查的所有详细信息.所以我们来写一个处理这个请求的回调操作:

class HooksController

  def survery_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

让我们添加一个路由(在config / routes.rb中):

scope '/hooks',:controller => :hooks do
  post :survey_created_callback
end

这将启用POST / hooks / survey_created_callback路由.

现在,您需要将此回调URL订阅到Webhooks API.首先你会想知道which hooks是可用的.您可以通过在/ api / v2 / webhooks /上放置GET请求来执行此操作.在响应中,您将找到事件名称,调查和收集器参数.

最后,您将subscribe通过向POST / api / v2 / webhooks / subscribe / URL提出以下内容的请求,将之前列出的一个钩子:

{
  "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]"
}

如果钩子成功创建,则对此的响应将是代码201,或者代码409,如果具有相同回调URL的webhook已经存在.还是别的,如果这样糟糕的话:)

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

希望这可以帮助…

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...