Sizda hech bir marta dastur yasayotganingizda shunday fikir bo'lganmi: "Men bu servisning API-ga so'rov yubora olaman, lekin ularda 'x' sodir bo'lganida ular menga habar berishlarining boshqacha bir yo'li bormikan". Siz qandaydur vaqt intervalida API-ga so'rov yuborib turishingiz mumkin. So'rovdan qaydgan javobni tekshirish oldingi holatiga solishtirish mumkin va o'zgarishlarni ko'ri bu bir usuli. Bunga polling deyiladi, ammo bu usulning samarsiz usul, siz osonlik bilan so'rov limitiga yetishingiz mumkin. Buning o'rniga, ba'zi API va xizmatlar webhook deb nomlanuvchi narsalarni taklif qiladi. Ularga bog'lanish o'rniga ular sizga bog'lanadi.

webhooknodeexpresspolling

Webhook-lar qanday ishlaydi

Webhook-lar - bu xabarnoma (notification) yuborish usuli. Ular odatda bir-tomonlama bo'ladi. Yuboruvchi bu ma'lumot bilan nima qilishingiz bilan ishi yo'q, yoki bazi hollarda so'rovchi kim ekanligi bilan ham. Ko'pi bilan ular, sizning dasturingiz bu xabarni qabul qilganligi haqida bilishni xohlashlari mumkin. Ko'plab servislar, Stripe API, SenderGrid API, GitHub API, va Bearer 🐻 - lar nimadur sodir bo'lsa sizni dasturiy ravishta habardor qilishni taklif qilishadi. Webhook - lar sizning tanlovingizga binoan taqdim etilgan URL-ga , hodisa haqidagi ma'lumotlarni o'z ichiga oluvchi POST so'rov yuborishadi.

Webhoo API so'rovga o'xshab ko'rinadi, lekin uning teskari tartibida. Siz API-ni chaqirib, ma'lumot so'rovi yuborishingiz o'rniga, API sizga nimadur sodir bo'lganligini bildir maqsadida so'rov yuboradi. Eng kamida hammasi servislar bitta narsani talab qiladi: sizga o'zgargan ma'lumotlarni yuborish uchun URL, yoki aniq bir URL-address tugash nuqtasi. Buni e-mail adresi sifatida ham tushunish mumkin. Boshqalar, shuningdek, webhook-larni himoyalash va autentifikatsiya qilish uchun konfiguratsiyani taklif qilishlari mumkin.

Agar siz dasturingiz foydalanadigan yoki boshqa dasturlar fodalanadigan REST API yasagan bo'lsangiz, bsohalashingiz uchun zarur bo'lgan, deyarli hamma narsani bilasiz.

Bizning misolimiz uchun, ish tartibi quydagicha:

  1. Web servislar sizning URL-ga ma'lumot jo'natishadi
  2. Sizning dasturingiz yuborilgan ma'lumotlarni qabul qiladi.
  3. Sizning dasturingiz javob qaytaradi va qabul qilinganligini tasdiqlaydi.
  4. Sizning das
  5. turingiz yuborilgan ma'lumotlar asosida nimadur harakat bajaradi.

Agar siz webhook tuzilishi uni ishlatish uchun dastur yaratishdan oldin sinab ko'rmoqchi bo'lsangiz, Requestbin kabi xizmatdan foydalanishingiz mumkin.

Dasturni sozlash

Biz bu misolimizda, Node.js va Express-dan foydalanamiz, lekin ushbu tushunchalar boshqa til va framework-lar bilan ham bir hil foydalanishimiz mumkin. Bu maqolani yozish paytida biz Node.js v13.1 va Express v4.17.1 - lardan foydalandik. Agar siz webhook-ni mavjuda bo'lgan loyiha bilan ishlatmoqchi bo'lsangiz bu qimidan o'qimasdan o'tib ketishingiz mumkin.

Boshlash uchun, yangi loyihani boshlab olamiz:

.
sh
npm init -y

Keyin, express va 'body-parser`-larni o'rnatib olamiz:

.
sh
npm install express body-parser

Loyihada bizning serverimizni ishga tushirish va webhook marshrutini (route) boshqarish uchun Express-dan foydalaniladi. Body parser paketi so'rov ma'lumotini boshqarishini osonlashtirish maqsadida ishlatilmoqda.

Keyingi qadamda index.js-da, minimal bo'lgan express servis sozlab olamiz:

/index.js
js
// Require express and body-parser
const express = require('express')
const bodyParser = require('body-parser')
// Initialize express and define a port
const app = express()
const PORT = 3000
// Tell express to use body-parser's JSON parsing
app.use(bodyParser.json())
// Start express on the defined port
app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`))

Agar siz ancha vaqtingizni Express bilan o'tkazgan bo'lsangiz bu sizga tanish bo'lishi kerak. Agar sizning sozlamalaringiz bir muncha murakkab bo'lsa, bu OK. Shu bir-xil tushunchalar oddiy va murakkab bo'lgan express loyihasi sozlamalariga ham o'xshagan bo'ladi.

Webhook uchun marshrut (route) - ni sozlash

Webhook-larni iste'mol qilish o'z API-ngiz uchun yangi end-point yaratish bilan bir xil tarzda boshlanadi.

/index.js
js
// Require express and body-parser
const express = require('express')
const bodyParser = require('body-parser')
// Initialize express and define a port
const app = express()
const PORT = 3000
// Tell express to use body-parser's JSON parsing
app.use(bodyParser.json())
// Start express on the defined port
app.post('/hook', (req, res) => {
  console.log(req.body) // Call your action on the request here
  res.status(200).end() // Responding is important
})
app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`))

Yuqorida bizning soddalashtirilgan marshrutimiz. Biz so'rovni bajarish uchun http://ourapp.com/hook yangi end-point yaratib olamiz. HTTP 2xx (200, 201, 202 va boshqalar) status kodi bilan tezda javob qaytarish muhim sanaladi. Slack API 3 sekund ichida javob qaytarishni talab qiladi. SendGrid va Slack kabi ba'zi API'lar, agar ular o'zlari talab qilgan vaqt ichida maqbul javob kodini olmasalar, ma'lumotni qayta yuborishga urinib ko'rishadi. Ularning shunga o'xshash maxsus talablarini bilib olish uchun juda ham diqqatlik bilan ular tomonidan berilgan qo'llamalarni o'qib chiqing.

Webhook'larni sozlab oling va ularni local'da test qilishni boshlang

Biz o'zimiz tomondagi barcha sozlamalarni bajarib olganimizdan so'ng endi API taminotchisiga ular ma'lumotni qayerga yuborishni aytish qoldi. Odatda taminotchilar API sozlamalarida "webhook" ostida topilgan bo‘lsa-da, ba'zan uni "events" yoki "event subscriptions" da ko‘rasiz. Eslatma: Zeit's Now kabi ba'zi API'lar REST API orqali veb-huklarni dasturiy ravishda yaratishingizni talab qiladi.

Masalan Bearer'da, Voqealar haqida bildirishnomalarni qabul qilish usuli sifatida webhook'lar taklif qilamiz. Siz ularni qoida konfiguratsiyasida o'rnatishingiz mumkin:

Bearer webhook setup

Bearer webhook setup

Local sinov uchun sizga ushbu so'rovlarni local serveringizga yuborish usuli kerak bo'ladi.

Biz dasturimizni ishga tushurganimizda (malan: node index.js) bizning endpoint'imiz http://localhost:3000/hook ko'rinishida bo'ladi. Bu ishlamaydi, shuning uchun biz local serverni internet-ga ochishimiz kerak. Buni hal qilish uchun biz ngrok-dan foydalanamiz, lekin agar xohlasangiz, localtunnel va localhost.run kabi boshqa yechimlar mavjud.

Ngrok akkaunti uchun roʻyxatdan oʻting va yuklab oling, oʻrnating, autentifikatsiya qilish va ulanish uchun koʻrsatmalarga amal qiling. Bu odatda ularning faylini ochish, uni foydalanuvchi papkangizga (user folder) joylashtirish, ular taqdim etgan buyruqni bajarish va keyin ./ngrok http 3000 ni ishga tushiring. 3000 qismi ilovangiz ishlayotgan portga mos kelishi kerak. Ngrok sizga http://4ds23d1.ngrok.io kabi ko'rinadigan URLni taqdim etadi.

Sozlash va o'rnatish

ngrok setup & installation

ngrok setup & installation

Webhook'ingizni sinab ko'rish uchun API sozlamalaridagi tegishli maydonga yangi yaratilgan url-ni kiriting. Ilovangizning webhook end-pointga qo'shishni unutmang. Bizning misolimizdan /hook. Bu http://4ds23d1.ngrok.io/hook kabi ko'rinishi kerak.

Agar biz "Test yuborish" tugmasi yordamida webhook'ni Bearer qoidalaridan birida sinab ko‘rsak, qoida, API, boshlanish va tugash vaqtlari va boshqalar haqida batafsil ma’lumotga ega json ma'lumotini olamiz.

Bu ma'lumotlar bilan biz nima qilishimiz mumkin

Har bir API turli xil hodisalarni (events) taqdim etadi. Ilovangiz chora ko‘rishi kerak bo‘lgan hodisa bilan shug‘ullanayotganda webhooklar ishga tushadi. Ilovangiz tomonidan saqlangan maʼlumotlar ilova interfeysidan tashqarida oʻzgarishi mumkin boʻlgan maʼlumotlarga tayanganda yoki biror harakat sodir boʻlganligini bilishingiz kerak boʻlganda, bu qimmatlidir. Webhooklar xizmatlarni Slack yoki Discord kabi chat ilovalariga ulash uchun kabi masalalarda juda ham foydalidur, chunki ular voqea sodir bo'lganda xabarlar yuborishi mumkin.

Bearer-dagi Rules & Incidents tizimimiz uchun webhook API kutilganidek ishlamasa, ilovangizga qaror qabul qilish imkonini beradi. Masalan:

Aytaylik, siz A xizmati orqali elektron pochta xabarini yuborasiz. Hisob qaydnomalari, parolni tiklash va h.k.lar uchun elektron pochta xabarlari. Sizga A xizmati yoqadi, lekin samaradorlik bilan bog‘liq muammolar mavjud bo‘lsa, zaxira nusxasi bo‘lishi yaxshi. Sizda A xizmatining xato darajasi qisqa vaqt ichida 50% dan oshganda ilovangizni xabardor qiladigan qoida oʻrnatilgan. Bu kutilmagan uzilishning belgisi bo'lishi mumkin. Ilovangiz webhook'larni qabul qiladi, uzilish vaqtini tekshiradi va voqea tugaguniga qadar B zaxira xizmatingizga o'tadi.

Xabarnomaning o'zi ajoyib, ammo u bergan o'zgarishlarga qarab reaksiyaga kirishish qobiliyati yanada yaxshi. Ushbu yondashuv biznesingizni siz ishonadigan xizmatlar muammolaridan himoya qilishga yordam beradi.

Webhook asoslaridan tashqari

Ushbu maqolada biz oddiy dasturni yaratdik, ammo siz quyidagi kabi ishlarni bajarish orqali davom etishingiz mumkin:

  • Hook'larni siz kutgan xizmatdan kelishiga ishonch hosil qilish uchun tekshirish zarur. Ko'pgina xizmatlar buni tasdiqlash uchun sizga qandaydur o'zaro kelishlgansirni taqdim etish orqali amalga oshiradilar.
  • Muayyan tadbirlar to'plamiga obuna bo'ling va ularga asoslangan harakatlarni almashtiring.
  • Ilovangizdagi maʼlumotlarni vebhukning ma'lumot asosida yangilang.

Ilovangiz foydalanadigan API hujjatlarini koʻrib chiqing va webhook sifatida qanday hodisalar mavjudligini koʻring. Agar sizga ilovangiz tayanadigan uchinchi tomon API’larini kuzatish va real vaqtda reaksiyaga kirishish g‘oyasi yoqsa, Bearer’da nimalar yaratayotganimizni ko'rib chiqing.

Asl maqola https://www.bearer.sh saytida chop etilgan.