Ruby on Rails
本教程将向您展示如何使用Lokalise Ruby SDK创建webhook,监听第三方应用程序中的webhook事件,以及处理传入通知。
在本教程中,你将学习如何……
- 使用本地化API令牌
- 使用localise API创建webhook
- 听webhooks事件
- 处理传入通知
你可以在GitHub上找到源代码.
先决条件
本指南假设您已经创建了一个Lokalise项目(如果没有,在本指南中学习如何创建一个新项目).此外,您还需要一个读/写本地化API令牌;你可以学习如何得到一个在相应的文章中.或者,您可以实现OAuth 2流相应的文章并代表用户行事。
如果您想在您的计算机上本地遵循本指南,您需要安装以下软件:
- Ruby 2.7或以上
- Rails 6或以上
- 您最喜欢的代码编辑器
- Heroku CLI
最后,请注意,为了监听和响应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:
![2022-05-10 14_59_15-My Web App _ Lokalise — Mozilla Firefox.png 955](https://files.readme.io/696a6a5-2022-05-10_14_59_15-My_Web_App___Lokalise__Mozilla_Firefox.png)
![Click to close... 955](https://files.readme.io/696a6a5-2022-05-10_14_59_15-My_Web_App___Lokalise__Mozilla_Firefox.png)
注意“X-Secret报头”的隐藏值。你可以在应用程序中使用这个值,并将它与发送给通知
额外保护的动作(从而过滤掉恶意请求)。
返回到Lokalise项目编辑器并创建一个新的翻译密钥。重新加载页面并确保隐藏了密钥:
![2022-05-10 15_00_12-My Web App _ Lokalise — Mozilla Firefox.png 281](https://files.readme.io/f8972ac-2022-05-10_15_00_12-My_Web_App___Lokalise__Mozilla_Firefox.png)
![Click to close... 281](https://files.readme.io/f8972ac-2022-05-10_15_00_12-My_Web_App___Lokalise__Mozilla_Firefox.png)
点击“评论”按钮(上面屏幕上的第一个按钮),并确保评论正确显示:
![2022-05-10 15_01_53-My Web App _ Lokalise — Mozilla Firefox.png 535](https://files.readme.io/2cb2c21-2022-05-10_15_01_53-My_Web_App___Lokalise__Mozilla_Firefox.png)
![Click to close... 535](https://files.readme.io/2cb2c21-2022-05-10_15_01_53-My_Web_App___Lokalise__Mozilla_Firefox.png)
就是这样,干得好!
更新 4个月前