После подготовки веб-перехватчика к доставке сообщений мы настроим базовый сервер Sinatra для обработки входящих полезных данных.
Примечание. Полный исходный код для этого проекта можно скачать из репозитория platform-samples.
Написание сервера
Мы хотим, чтобы сервер прослушивал запросы POST
в /payload
, поскольку именно это расположение мы указали в GitHub как URL-адрес нашего веб-перехватчика. Так как мы используем для ngrok
предоставления доступа к локальной среде, нам не нужно настраивать реальный сервер где-то в Интернете, и мы можем с радостью протестировать наш код локально.
Давайте настроим небольшое приложение Sinatra для выполнения каких-либо действий с информацией. Исходная настройка может выглядеть так:
require 'sinatra'
require 'json'
post '/payload' do
push = JSON.parse(request.body.read)
puts "I got some JSON: #{push.inspect}"
end
(Если вы не знакомы с тем, как работает Sinatra, рекомендуем ознакомиться с руководством по Sinatra.)
Запустите этот сервер.
Поскольку мы настроили наш веб-перехватчик для прослушивания событий, которые работают с Issues
, давайте создадим новую проблему в репозитории, который вы используете для тестирования. После его создания вернитесь в терминал. В выходных данных должны отобразиться примерно такие данные:
$ ~/Developer/platform-samples/hooks/ruby/configuring-your-server $ ruby server.rb
> == Sinatra/1.4.4 has taken the stage on 4567 for development with backup from Thin
> >> Thin web server (v1.5.1 codename Straight Razor)
> >> Maximum connections set to 1024
> >> Listening on localhost:4567, CTRL+C to stop
> I got some JSON: {"action"=>"opened", "issue"=>{"url"=>"...
Готово! Вы успешно настроили сервер для прослушивания веб-перехватчиков. Теперь сервер может обрабатывать эти сведения любым выбранным способом. Например, если вы настроили "реальное" веб-приложение, может потребоваться записать некоторые выходные данные JSON в базу данных.
Дополнительные сведения об использовании веб-перехватчиков для удовольствия и выгоды см. в руководстве по тестированию веб-перехватчиков.