Heim > Backend-Entwicklung > Golang > Aufbau eines Webhook-Nutzlastbereitstellungsdienstes in Go

Aufbau eines Webhook-Nutzlastbereitstellungsdienstes in Go

Linda Hamilton
Freigeben: 2025-01-20 18:20:13
Original
899 Leute haben es durchsucht

Dieser Artikel beschreibt die Erstellung eines Webhook-Proxys mit Go, der die lokale Entwicklung von Anwendungen ermöglicht, die GitHub-Webhooks abhören. Die Lösung vermeidet die Verwendung von Drittanbieterdiensten wie smee.io oder ngrok, indem sie einen benutzerdefinierten Server und eine CLI-Anwendung erstellt.

Building a Webhook payload delivery service in Go

Die Herausforderung besteht darin, Webhook-Ereignisse von GitHub an eine Localhost-Entwicklungsumgebung weiterzuleiten. In diesem Tutorial wird eine zweiteilige Lösung vorgestellt: ein Server zum Empfangen von GitHub-Ereignissen und eine CLI zum Weiterleiten dieser Ereignisse an eine lokale Anwendung.

Architektur:

Das System umfasst vier Schlüsselkomponenten:

  1. GitHub: Die Quelle von Webhook-Ereignissen.
  2. Go-Server: Empfängt Ereignisse von GitHub und leitet sie an die CLI weiter.
  3. Go CLI: Läuft lokal, abonniert Serverereignisse und leitet sie an die lokale Anwendung weiter.
  4. Lokale Anwendung: Ein Dummy-Server (zum Testen) empfängt die weitergeleiteten Anfragen.

Building a Webhook payload delivery service in Go

Die Kommunikation zwischen der CLI und dem Server nutzt Server-Sent Events (SSE), eine einfache, einseitige Pushing-Technologie.

Umsetzung:

Die Projektstruktur umfasst ein cmd-Verzeichnis für die CLI und die ausführbaren Serverdateien sowie ein internal-Verzeichnis für freigegebene Pakete. Der Server nutzt die go-sse-Bibliothek für die SSE-Funktionalität. Die CLI verwendet die backoff-Bibliothek für eine robuste Verbindungsverarbeitung.

*Server (cmd/web/main.go und internal/server/):**

Der Server verfügt über zwei Endpunkte:

  • /channel/{channel} (GET): Stellt eine SSE-Verbindung mit der CLI her.
  • /channel/{channel} (POST): Empfängt GitHub-Webhook-Ereignisse, codiert sie und veröffentlicht sie an die verbundenen CLIs.

CLI (cmd/cli/main.go):

Die CLI stellt eine SSE-Verbindung zum Server her, empfängt verschlüsselte Anfragen, dekodiert sie und leitet sie an die angegebene lokale Anwendung weiter. Fehlerbehandlung und exponentielles Backoff werden mithilfe der backoff-Bibliothek implementiert.

Testen:

Ein einfacher Testserver (cmd/test/main.go) wird bereitgestellt, um weitergeleitete Webhook-Ereignisse zu empfangen und zu verarbeiten. Nach der Bereitstellung des Servers und der Ausführung der CLI löst das Pushen von Änderungen im GitHub-Repository den Webhook aus, der dann an den lokalen Testserver weitergeleitet wird.

Building a Webhook payload delivery service in Go

Building a Webhook payload delivery service in Go

Bereitstellung (Anhänge):

Der Artikel beschreibt die Bereitstellung des Servers mit Docker und Kamal, einem Bereitstellungstool. Es umfasst das Erstellen einer Docker-Datei, das Einrichten von Kamal, das Konfigurieren von Umgebungsvariablen (einschließlich der Verwendung eines Passwort-Managers aus Sicherheitsgründen) und das Hinzufügen eines Endpunkts für die Gesundheitsprüfung. Der Prozess umfasst die Einrichtung eines DigitalOcean-Droplets, die Konfiguration des SSH-Zugriffs und die Verwaltung von Domänennamen und SSL-Zertifikaten mit Let's Encrypt über den Proxy von Kamal. Zusätzliche Sicherheitsmaßnahmen und Verbesserungen der Entwicklungsumgebung werden ebenfalls vorgeschlagen.

Diese robuste Lösung bietet eine flexible und zuverlässige Methode zur Handhabung von GitHub-Webhooks während der lokalen Entwicklung, sodass keine externen Dienste erforderlich sind. In einem zukünftigen Artikel wird es darum gehen, dies zu erweitern, um einen Telegram-Bot zu erstellen.

Das obige ist der detaillierte Inhalt vonAufbau eines Webhook-Nutzlastbereitstellungsdienstes in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage