首頁 >後端開發 >Golang >在 Go 中建置 Webhook 有效負載交付服務

在 Go 中建置 Webhook 有效負載交付服務

Linda Hamilton
Linda Hamilton原創
2025-01-20 18:20:13837瀏覽

本文詳細介紹了使用 Go 建立 Webhook 代理,從而實現監聽 GitHub Webhooks 的應用程式的本地開發。 該解決方案透過建立自訂伺服器和 CLI 應用程式來避免使用 smee.io 或 ngrok 等第三方服務。

Building a Webhook payload delivery service in Go

挑戰在於將 webhook 事件從 GitHub 轉送到本機開發環境。 本教學提供了一個由兩部分組成的解決方案:一個用於接收 GitHub 事件的伺服器和一個用於將事件轉發到本機應用程式的 CLI。

建築:

系統涉及四個關鍵組件:

  1. GitHub: webhook 事件的來源。
  2. Go 伺服器: 從 GitHub 接收事件並將其轉送到 CLI。
  3. Go CLI:在本地運行,訂閱伺服器事件,並將它們轉發到本地應用程式。
  4. 本機應用程式:虛擬伺服器(用於測試)接收轉發的請求。

Building a Webhook payload delivery service in Go

CLI 和伺服器之間的通訊使用伺服器發送事件 (SSE),這是一種簡單的單向推播技術。

實作:

專案結構包括用於 CLI 和伺服器執行檔的 cmd 目錄,以及用於共用套件的 internal 目錄。 伺服器利用 go-sse 函式庫來實作 SSE 功能。 CLI 使用 backoff 函式庫進行穩健的連線處理。

*伺服器(cmd/web/main.go 和internal/server/):**

伺服器有兩個端點:

  • /channel/{channel} (GET):與 CLI 建立 SSE 連線。
  • /channel/{channel} (POST):接收 GitHub Webhook 事件,對它們進行編碼,並將它們發佈到連接的 CLI。

CLI (cmd/cli/main.go):

CLI 建立到伺服器的 SSE 連接,接收編碼的請求,對其進行解碼,並將其轉發到指定的本地應用程式。 錯誤處理和指數退避是使用 backoff 函式庫實現的。

檢定:

提供了一個簡單的測試伺服器(cmd/test/main.go)來接收和處理轉發的 Webhook 事件。 部署伺服器並執行 CLI 後,將變更推送到 GitHub 儲存庫會觸發 Webhook,然後將其轉送到本機測試伺服器。

Building a Webhook payload delivery service in Go

Building a Webhook payload delivery service in Go

部署(附錄):

文章詳細介紹如何使用 Docker 和部署工具 Kamal 來部署伺服器。 它包括建立 Dockerfile、設定 Kamal、配置環境變數(包括使用密碼管理器確保安全)以及新增運行狀況檢查端點。 該過程包括設定 DigitalOcean Droplet、配置 SSH 存取以及透過 Kamal 代理程式使用 Let's Encrypt 管理網域名稱和 SSL 憑證。 也建議採取額外的安全措施和改進開發環境。

這個強大的解決方案提供了一種靈活可靠的方法,用於在本地開發期間處理 GitHub webhooks,從而無需外部服務。 未來的文章將探討擴展它以創建 Telegram 機器人。

以上是在 Go 中建置 Webhook 有效負載交付服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn