Ruby on Rails

本教程将向您展示如何使用Lokalise Ruby SDK创建webhook,监听第三方应用程序中的webhook事件,以及处理传入通知。

在本教程中,你将学习如何……

  • 使用本地化API令牌
  • 使用localise API创建webhook
  • 听webhooks事件
  • 处理传入通知

你可以在GitHub上找到源代码

先决条件

本指南假设您已经创建了一个Lokalise项目(如果没有,在本指南中学习如何创建一个新项目).此外,您还需要一个读/写本地化API令牌;你可以学习如何得到一个在相应的文章中.或者,您可以实现OAuth 2流相应的文章并代表用户行事。

如果您想在您的计算机上本地遵循本指南,您需要安装以下软件:

最后,请注意,为了监听和响应webhook事件,你的应用必须是可公开访问的。在本教程中,我们将把应用部署到Heroku(见下文)。

我们要建造什么

我们将创建一个简单的应用程序,允许用户在他们的Lokalise项目中注册webhook。该应用程序还将监听这些webhook生成的传入通知,并通过发送API请求对其做出反应。

准备一个新的Rails应用程序

运行以下命令创建一个新的Rails应用程序:

rails新LokaliseWebhooksDemo

这将为您创建一个应用程序框架。

打开你的Gemfile并按如下方式修改:

开发组:做gem 'sqlite3', '~> 1.4'结束组:做gem 'pg', '~> 1.0'结束组:做gem 'ruby-lokalise-api', '~> 6.0'

cd进入你的项目目录并运行:

接下来,创建一个Procfile内容如下:

web: bundle exec puma -C config/puma.rb

此文件将在Heroku云托管上使用。如果您使用的是不同的主机提供商,则可能需要采取额外的步骤。

最后,初始化一个新的Git仓库并创建一个新的Heroku应用:

Git init Git addgit commit -m "Initial" heroku创建YOUR_APP_NAME

你的应用必须是可公开访问的

如果你在本地运行Rails应用程序(rails的年代),并提供localhost: 3000 /通知作为通知URL,它将不可能注册一个localise webhook。这是因为Lokalise向提供的URL发送了一个特殊的“ping”请求,并期望收到一个2xx状态码。如果URL不可访问,则不会创建webhook。

登记人

现在让我们创建一个新的控制器控制器/ webhooks_controller.rb文件:

要求'ruby_lokalise_api'类WebhooksController < ApplicationController def new;end private def api_client @client ||= RubyLokaliseApi。client ENV['LOKALISE_API_TOKEN'] end

该控制器将用于注册新的webhook,因此我们在这里也创建了一个Lokalise SDK客户端。

控件中创建一个新表单/人/ new.html.erb观点文件:

注册一个新的webhook

<%= form_with url: webhooks_path do |f| %> <%= f.t ellabel:project_id %> <%= f.t text_field:project_id %> <%= f.t rsubmit "Register!"%> <% end %>

添加必要的路由到配置/ routes.rb

资源:webhooks,仅:%i[new create] root 'webhooks#new'

接下来加a创建对我们的行动WebhooksController,它应该通过localise API注册一个新的webhook:

创建api_client。创建_webhook params[:project_id], url: 'https://lokalise-webhooks-rails.herokuapp.com/webhooks/notify', events: %w[project.key.added] redirect_to root_path end

回应通知

接下来,让我们添加一个新的通知监听所有传入事件的操作:

Skip_before_action:verify_authenticity_token, only: [:notify] #…Def notify if params[:event] == 'project.key。新增' project_id = params[:project][:id] key_id = params[:key][:id] api_client。创建_comments project_id, key_id, [ { comment: '@Bob could you please double check this key to make sure it complies with our requirements?' } ] api_client.update_key project_id, key_id, is_hidden: true end head :ok end

如果事件是project.key.added,我们为这个键添加一个新的评论,并对所有非管理员隐藏它。请注意,事件处理程序必须响应POST请求并返回2xx状态码。否则,localise将认为webhook通知不成功,并尝试多次重新发送失败的通知。

请注意,我们也跳过了此操作的真实性令牌验证,这是强制性的。或者,您可以编写自定义before_action为了验证X-Secret头(稍后我们将看到)。

添加一条新路由到配置/ routes.rb

资源:webhooks,仅:%i[new create] do collection do post 'notify' end end

进行测试

现在一切都准备好了!让我们将应用发布到Heroku,并添加一个带有Lokalise API令牌的环境变量:

Git添加。git push heroku master heroku config:添加LOKALISE_API_TOKEN=123abc heroku open

在文本输入中输入您的Lokalise项目ID,然后按“Register!”

现在打开Lokalise,继续你的项目,点击顶部菜单中的“Apps”。找到“Webhooks”应用程序,点击它,然后按“管理”。您将看到为您注册了一个新的webhook:

955955

注意“X-Secret报头”的隐藏值。你可以在应用程序中使用这个值,并将它与发送给通知额外保护的动作(从而过滤掉恶意请求)。

返回到Lokalise项目编辑器并创建一个新的翻译密钥。重新加载页面并确保隐藏了密钥:

281281

点击“评论”按钮(上面屏幕上的第一个按钮),并确保评论正确显示:

535535

就是这样,干得好!


这个页面对你有帮助吗?