通过您提供的
回调 URL Webhooks 挂钩到您的应用中。这只是响应 POST 请求并处理 webhook 请求的控制器中的一个操作。每次远程服务发生变化时,远程服务都会向您提供的回调 URL 发出请求,从而触发 action 代码。
我将以 调查创建 事件为例。您首先为此事件定义一个 回调 操作,您可以在其中处理来自 webhook 的请求。如here 所述,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``
让我们暂时保留标题,它们不包含重要信息。可用的正文参数(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
让我们为此添加路由(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 请求。在响应中,您会找到 事件名称、survey 和 collector 参数。
最后,您通过向POST /api/v2/webhooks/subscribe/ URL 发出请求并包含以下内容,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]"
}
如果钩子创建成功,则响应代码为201,如果相同回调 URL 的 webhook 已经存在,则响应代码为 409。或者别的什么,如果这不好:)
您现在可以通过在远程服务上创建一个调查,然后观察它在您的 Rails 应用程序中的复制来测试该钩子。
希望这会有所帮助...