Vad är en webhook?
En webhook är en metod för en applikation eller ett system att skicka realtidsinformation till en annan applikation så snart en specifik händelse inträffar. Istället för att den mottagande applikationen hela tiden måste fråga (“polla”) den sändande applikationen om något nytt har hänt, kan den sändande applikationen automatiskt skicka ett meddelande (en HTTP POST-förfrågan) till en fördefinierad URL (webhook-URL:en) hos den mottagande applikationen. Man kan likna det vid en prenumerationstjänst där du får en notis direkt när något relevant sker.
Webhooks kallas ibland för “omvända API:er” eller “HTTP-callbacks” eftersom de inverterar kommunikationsflödet jämfört med ett traditionellt API-anrop.
Hur fungerar en webhook?
Processen för en webhook involverar vanligtvis följande steg:
- Konfiguration: Den mottagande applikationen (klienten) tillhandahåller en unik URL (webhook-URL) till den sändande applikationen (servern). Klienten talar också om för servern vilka händelser den är intresserad av att bli notifierad om.
- Händelse inträffar: En specifik händelse sker i den sändande applikationen (t.ex. en ny order skapas i en e-handelsplattform, en betalning genomförs, ett formulär fylls i).
- HTTP POST-förfrågan: Den sändande applikationen skickar omedelbart en HTTP POST-förfrågan till den konfigurerade webhook-URL:en. Denna förfrågan innehåller information (ofta i JSON- eller XML-format) om den inträffade händelsen.
- Mottagande och bearbetning: Den mottagande applikationen tar emot HTTP POST-förfrågan, validerar den (om nödvändigt), och bearbetar sedan informationen för att utföra en åtgärd (t.ex. uppdatera en databas, skicka ett e-postmeddelande, starta en annan process).
Webhook vs. API-anrop (Polling)
Den största skillnaden mellan att använda en webhook och att göra regelbundna API-anrop (polling) är effektiviteten:
- Webhook (Push): Informationen “trycks” (pushas) från servern till klienten så fort en händelse sker. Detta är resurseffektivt eftersom ingen onödig kommunikation sker. Klienten får informationen i realtid.
- API-anrop/Polling (Pull): Klienten måste regelbundet “dra” (pulla) information från servern genom att ställa frågor som “Har något nytt hänt sedan sist?”. Detta kan vara resurskrävande, särskilt om händelser är sällsynta, och det kan finnas en fördröjning innan klienten upptäcker en ny händelse.
Webhooks är alltså att föredra när realtidsuppdateringar är viktiga och när man vill undvika onödig belastning på systemen.
Användningsområden för webhooks
Webhooks används i en mängd olika sammanhang för att skapa realtidsintegrationer och automatisera processer:
- E-handel: Meddela ett WMS när en ny order har lagts, uppdatera lagersaldot när en betalning är genomförd, skicka orderbekräftelser.
- Betalningstjänster: Informera en webbutik när en betalning har lyckats eller misslyckats.
- CRM-system: Synkronisera kunddata mellan CRM och andra system när en ny kontakt skapas eller en affär uppdateras.
- Versionshanteringssystem (t.ex. GitHub, GitLab): Starta en automatisk bygg- och testprocess när ny kod checkas in.
- Sociala medier: Få notiser när någon nämner ditt företag eller när ett visst innehåll publiceras.
- Meddelandetjänster (t.ex. Slack, Microsoft Teams): Skicka notiser till en chattkanal när en viss händelse inträffar i ett annat system.
- Marketing Automation: Starta en e-postkampanj när en användare utför en viss handling på en webbplats.
Att tänka på när man använder webhooks
- Säkerhet: Eftersom webhook-URL:en är publik är det viktigt att säkra den. Använd HTTPS, validera inkommande förfrågningar (t.ex. med en signatur eller en hemlig nyckel) för att säkerställa att de kommer från en betrodd källa.
- Felhantering: Vad händer om den mottagande applikationen är nere när en webhook skickas? Den sändande applikationen bör ha en mekanism för att försöka skicka igen (retry) eller logga felet.
- Idempotens: Om samma webhook skickas flera gånger (t.ex. på grund av ett nätverksfel), bör den mottagande applikationen kunna hantera detta utan att skapa dubbletter eller oönskade sidoeffekter.
- Payload-storlek: Håll mängden data som skickas i en webhook (payload) rimlig. Skicka bara den information som behövs för att identifiera händelsen. Om mer data behövs kan den mottagande applikationen göra ett efterföljande API-anrop.
- Testning: Testa dina webhooks noggrant för att säkerställa att de fungerar som förväntat.
Vanliga frågor och svar (FAQ)
Är webhooks samma sak som API:er?
Nej, inte exakt. Ett API är ett bredare begrepp som definierar hur olika system kan interagera med varandra, oftast genom att klienten initierar en förfrågan till servern. En webhook är en specifik mekanism där servern initierar kommunikationen till klienten när en händelse inträffar. Webhooks använder ofta API:er i bakgrunden för att faktiskt skicka data.
Vad är en “payload” i en webhook?
Payloaden är den faktiska datan som skickas med webhook-förfrågan. Den innehåller information om den händelse som har inträffat. Formatet på payloaden är ofta JSON, men kan också vara XML eller andra format, beroende på hur den sändande applikationen har implementerat sin webhook.
Hur skapar jag en webhook?
Processen varierar beroende på de system du vill integrera. Den sändande applikationen (t.ex. din e-handelsplattform eller betaltjänst) har vanligtvis en inställningssida där du kan ange en URL dit webhooks ska skickas. Den mottagande applikationen måste ha en motsvarande URL (en “endpoint”) som kan ta emot och bearbeta dessa HTTP POST-förfrågningar. Detta kräver ofta viss programmering.
Vad är skillnaden mellan en callback och en webhook?
Begreppen används ibland synonymt, men det finns en subtil skillnad. En callback är ett mer generellt programmeringskoncept där en funktion skickas som ett argument till en annan funktion och anropas när den första funktionen är klar. En webhook är en specifik typ av callback som sker över HTTP och används för att notifiera ett externt system om en händelse. Man kan säga att en webhook är en HTTP-baserad callback.
Vill du veta mer om webhooks och hur de kan användas för att skapa effektiva systemintegrationer? Kontakta oss på Genesis, eller läs vidare i vårt ordförråd!