Un magazin online trebuie să știe când o plată a fost finalizată. Un CRM trebuie să știe când sosește o cerere nouă de pe site. Există două moduri de bază prin care un sistem află ce se întâmplă în altul: să întrebe regulat sau să fie anunțat.
Polling: să întrebi regulat
Cu polling, sistemul tău întreabă celălalt sistem la fiecare câteva minute: „E ceva nou?”. Este simplu de construit și funcționează cu aproape orice serviciu care are API. Dezavantajele sunt întârzierea - afli despre eveniment abia la următoarea verificare - și risipa: majoritatea cererilor nu întorc nimic, dar consumă totuși limite și resurse.
Webhookuri: să fii anunțat
Cu un webhook, celălalt sistem trimite un mesaj la adresa ta imediat ce se întâmplă ceva. Informația ajunge aproape instantaneu și nu există cereri goale. Prețul este responsabilitatea: punctul tău de primire trebuie să fie disponibil, să verifice că mesajul vine cu adevărat de la partener și să-l trateze corect chiar dacă același mesaj sosește de două ori.
Cum faci webhookurile fiabile
Verifică semnătura sau secretul pe care furnizorul îl atașează fiecărui mesaj, ca nimeni să nu-ți poată trimite evenimente false. Răspunde rapid și fă procesarea grea în fundal, altfel furnizorul poate considera livrarea eșuată și o poate repeta. Păstrează un identificator al fiecărui eveniment procesat și ignoră duplicatele. Ține un jurnal al mesajelor primite pentru a putea investiga problemele.
Combinația practică
În practică, cele mai robuste integrări combină ambele abordări. Webhookurile livrează evenimentele în timp real, iar o verificare periodică - de exemplu o dată pe oră sau în fiecare noapte - compară starea de pe ambele părți și recuperează ce s-a pierdut în timpul unei actualizări de server sau al unei pene a furnizorului.
Pe scurt
Polling-ul este simplu, dar mai lent și risipitor; webhookurile sunt rapide, dar cer atenție. Folosește webhookuri pentru viteză, protejează-le cu semnături și verificarea duplicatelor și adaugă o reconciliere periodică pentru ca niciun eveniment să nu se piardă.