Cum să testați webhook-urile din API-urile publice în dezvoltarea locală
Publicat: 2022-08-26
Webhook-urile sunt un mecanism de primire a notificărilor despre evenimente de la sisteme disparate, fără a fi nevoie să le interogheze continuu. Denumite și API inverse, acestea pot fi considerate ca furnizând „specificații API” pe care sistemul consumator trebuie să le implementeze. Una dintre provocările lucrului cu webhook-uri este testarea codului pe care îl scrieți pentru a procesa webhook-urile în mediul dvs. de dezvoltare local. În acest articol, vă voi arăta câteva dintre opțiunile disponibile pentru a testa webhook-urile la nivel local.
Cum funcționează webhook-urile?
Pe măsură ce lumea devine din ce în ce mai interconectată, este mai probabil ca aplicația dvs. să primească informații de la alte sisteme. O modalitate de a face acest lucru este să interogați periodic celălalt sistem pentru a vedea dacă sunt disponibile informații noi, dar ar trebui să interogați foarte des pentru a obține ceva aproape de datele în timp real. O modalitate mai eficientă de a face acest lucru este utilizarea webhook-urilor.
Un webhook este în esență o solicitare HTTP trimisă de sistemul sursă către o adresă URL înregistrată în sistemul de destinație. În termeni de programare, webhook-urile pot fi considerate ca o implementare a modelului Observer. Acesta este locul în care sistemul consumator se înregistrează pentru a fi notificat despre evenimentele din sistemul sursă prin înregistrarea unui punct final sau URL.
Majoritatea sistemelor sursă acceptă măsuri de securitate, cum ar fi să vă permită să configurați autentificarea de bază sau autentificarea folosind jetoane purtător atunci când înregistrați un punct final. Când are loc un eveniment despre care un sistem s-a înregistrat pentru a fi notificat, sistemul sursă trimite o solicitare HTTP la punctul final înregistrat cu o sarcină utilă care conține informații referitoare la eveniment.
Webhook-urile sunt utilizate pe scară largă de aplicațiile web moderne. De exemplu:
- Paypal utilizează notificări de plată instantanee (IPN), care sunt în esență webhook-uri pentru a trimite notificări ori de câte ori se primește o plată.
- GitHub folosește webhook-uri pentru a informa sistemele CI/CD atunci când are loc un eveniment push.
- Slack implementează webhook-uri care permit oricărui sistem să trimită mesaje care sunt publicate către canalele Slack selectate.
Lucrul cu Webhooks
După cum am menționat anterior, URL-urile webhook pot fi considerate ca API-uri inverse pe care sistemul consumator trebuie să le implementeze. De obicei, cererile webhook sunt procesate prin scrierea codului într-un limbaj de programare precum PHP. Înainte de a scrie orice cod pentru a procesa informațiile trimise printr-un webhook, aveți nevoie de o înțelegere clară a modului în care arată sarcina utilă. Odată ce ați scris un cod pentru a procesa sarcina utilă, trebuie să puteți testa dacă codul dvs. face ceea ce ar trebui atunci când primește webhook-ul, cum ar fi returnarea codului de stare corect.
Inspectarea sarcinilor utile și testarea webhook
Instrumente precum Request Bin vă permit să creați un punct final accesibil public pe care îl puteți configura în sistemul dumneavoastră sursă. Ori de câte ori are loc un eveniment pentru care v-ați înregistrat, sistemul sursă trimite o solicitare HTTP GET sau POST către coșul dvs., permițându-vă să inspectați încărcătura utilă. Request Bin vă permite, de asemenea, să vizualizați elemente precum anteturile, facilitând depanarea și depanarea. Pentru a vedea cum funcționează, mergeți la Request Bin și faceți clic pe linkul care spune Creați un coș public . Vi se va prezenta o adresă URL pe care o puteți configura ca punct final în sistemul dumneavoastră sursă.
De exemplu, am adăugat un webhook pe site-ul meu WooCommerce urmând pașii descriși în documentația WooCommerce. În câmpul „Adresa URL de livrare”, am introdus adresa URL pe care mi-a prezentat-o Request Bin.
Când am creat o comandă, WooCommerce a trimis o solicitare HTTP la punctul final configurat și am putut să inspectez imediat sarcina utilă accesând adresa URL a coșului meu în Request Bin.
De obicei, nu doriți să creați un coș public, deoarece este accesibil pentru oricine are adresa URL a coșului. De obicei, este mai bine să creezi un coș privat, care necesită să creați un cont cu Pipedream.
Primirea locală a webhook-urilor
Înainte de a implementa orice cod care procesează webhook-uri, trebuie să testați codul în mediul dumneavoastră de dezvoltare. Pentru aceasta, trebuie să puteți expune punctul final local ca o adresă URL publică pe care o puteți configura ca adresă URL de destinație în sistemul care trimite webhook-urile. Există destul de multe instrumente disponibile pentru a face asta.
Expunerea punctelor finale locale cu ngrok
Probabil că cel mai utilizat instrument pentru a expune un punct final local la internet este ngrok. Pentru a începe să utilizați ngrok, trebuie să vă creați un cont gratuit.
Instalarea ngrok este destul de simplă. Mergeți la pagina de descărcări, obțineți binarul potrivit pentru sistemul dvs. de operare, dezarhivați-l și copiați într-un director de pe calea dvs. Pe un Mac, puteți utiliza alternativ Homebrew pentru a instala ngrok:
brew install ngrok/ngrok/ngrok
Următorul pas după instalarea ngrok este adăugarea unui token de autorizare. Odată ce vă creați un cont și vă conectați, vă puteți obține indicativul vizitând tabloul de bord.
ngrok config add-authtoken (jeton)
Acum sunteți gata să expuneți adresa URL a punctului final local folosind ngrok. Să presupunem că aveți o aplicație web care rulează pe portul 80. În terminalul dvs., tastați ngrok http 80
. Ieșirea dvs. ar trebui să arate astfel:
ngrok (Ctrl+C pentru a ieși) Accesați http://localhost:4040/ pentru a inspecta, relua și modifica solicitările dvs Starea sesiunii online Cont Sanjucta Ghose (Plan: Gratuit) Versiunea 3.0.6 Regiunea Asia Pacific (ap) Latență 89 ms Interfață web http://127.0.0.1:4040 Redirecționare https://deec-110-227-84-74.ap.ngrok.io -> http://localhost:80 Conexiuni ttl opn rt1 rt5 p50 p90 0 0 0,00 0,00 0,00 0,00
Acum aveți o adresă URL accesibilă public, https://deec-110-227-84-74.ap.ngrok.io
, pe care o puteți utiliza ca adresă URL de destinație atunci când vă configurați webhook.

Ngrok oferă comutatoare și opțiuni care vă permit să configurați modul în care funcționează. Puteți vedea ce opțiuni sunt disponibile cu ngrok -help
.
Utilizarea ngrok cu gazde virtuale
Este probabil să vă deserviți site-ul local printr-o gazdă virtuală, un mecanism care vă permite să serviți mai multe domenii de pe un singur server web. Serverele web implementează de obicei acest lucru verificând antetul gazdă al solicitării HTTP pentru a determina ce site ar trebui să fie servit. Pentru a expune un site servit printr-o gazdă virtuală, trebuie să îi ceri lui ngrok să rescrie antetul gazdă al tuturor solicitărilor tunelizate pentru a se potrivi cu ceea ce se așteaptă serverul tău web. Să presupunem că aveți un site local care rulează la http://hellfishmedia.test
. Pentru a expune acest site, puteți folosi următoarea comandă:
ngrok http --host-header=hellfishmedia.test 80
Utilizarea ngrok cu WordPress
Dacă adresa URL pe care încercați să o expuneți folosind ngrok este un punct final WordPress, documentația descrie câteva lucruri pe care trebuie să le faceți pentru a vă asigura că funcționează.
Folosind ngrok cu Laravel Valet
Nu trebuie să instalați ngrok separat dacă sunteți utilizator macOS și utilizați Laravel Valet ca mediu de dezvoltare local. Valet vine la pachet cu o copie a ngrok pe care o folosește pentru a expune adrese URL accesibile public. Puteți pur și simplu să navigați la directorul site-ului dvs. și să utilizați comanda valet share
pentru a obține o adresă URL accesibilă public.
Trebuie să menționați numele domeniului atunci când utilizați comanda valet share
dacă v-ați asociat site-ul la un domeniu care este diferit de numele directorului site-ului. De exemplu, dacă utilizați valet link hellfishmedia
pentru a vă face site-ul disponibil la http://hellfishmedia.test
, atunci ar trebui să utilizați și următoarea comandă pentru a obține o adresă URL accesibilă public:
valet share hellfishmedia
Utilizarea localului ca mediu de dezvoltare locală
Local by WP Engine este un mediu de dezvoltare local foarte popular pentru dezvoltatorii WordPress. Local ușurează expunerea unui punct final local folosind funcția Live Links fără a necesita niciun software suplimentar.
Alternative la ngrok
Există mai multe alternative la ngrok care vă permit să expuneți un punct final local la internet. Am încercat două dintre ele mai jos.
Tunel local
Localtunnel este o alternativă open source care vă permite să expuneți un punct final local fără a fi nevoie să creați un cont. Cu toate acestea, va trebui să aveți instalat Node.js.
Pentru a instala Localtunnel, utilizați comanda:
npm install -g localtunnel
Pentru a expune o aplicație care rulează pe localhost:80
, rulați următoarea comandă pe terminal:
lt --port 80
Dacă aplicația dvs. locală rulează printr-o gazdă virtuală la http://hellfishmedia.test
, atunci puteți utiliza comutatorul localhost
lt --port 80 --localhost hellfishmedia.test
Pagekite
Pagekite este un alt serviciu care vă permite să expuneți un punct final local. Este scris în Python și necesită să aveți Python instalat pe sistemul dumneavoastră. Presupunând că sunteți pe un Mac și aveți instalat Python 3.x, puteți începe rapid tastând următoarele pe terminal:
curl -O https://pagekite.net/pk/pagekite.py
Aceasta va prelua programul pagekite.py
pentru dvs. După aceea, poți crea primul tău „zmeu” folosind următoarea comandă și înlocuind (numele tău) cu numele pe care vrei să-l folosești pentru a-ți identifica zmeul:
python3 pagekite.py 80 (numele tău).pagekite.me
Vi se va solicita să introduceți adresa de e-mail pentru a crea un cont atunci când executați această comandă pentru prima dată. Ulterior, când rulați această comandă, va trebui să vă conectați la contul dvs. introducând parola. Comanda de mai sus va face localhost:80
disponibil la (yourname).pagekite.me
.
Pentru a vă expune site-ul local care rulează la hellfishmedia.test
printr-o gazdă virtuală, puteți utiliza următoarea comandă:
pagekite.py deliciousbrains.test:80 (numele tău).pagekite.me +rewritehost
Concluzie
Webhook-urile sunt o modalitate convenabilă și acum aproape omniprezentă pentru sistemele de a comunica prin HTTP. În calitate de dezvoltator, trebuie să puteți inspecta sarcina utilă pentru a procesa webhook-uri, care este locul în care servicii precum Request Bin sunt utile. Testarea codului de procesare webhook înseamnă că trebuie să expuneți punctul final local la internet. Acest lucru este posibil de o serie de servicii, inclusiv ngrok, Localtunnel și Pagekite.
Ați fost nevoit vreodată să scrieți cod pentru a procesa webhook-uri? Dacă da, ce instrumente ați folosit pentru a vă testa webhook-urile? Anunță-mă în comentarii.