Go で関数を使用して Webhook を処理する方法: func を使用して、HTTP リクエストを処理する関数を宣言します。リクエスト本文を解析し、署名またはトークンを検証し、対応する処理ロジックをトリガーします。これは、Github Webhook API を使用して、プル リクエストやプッシュ イベントの処理など、特定のイベントが発生したときにさまざまな処理ロジックをトリガーする、Github Webhook を処理するための実際的なケースとして使用できます。
Go で関数を使用して Webhook を処理する
Go で関数を使用することは、Webhook を処理するための効率的かつ軽量な方法です。 。 Webhook は、特定のイベントが発生したときにサードパーティ アプリケーションが通知を受信できるようにする HTTP コールバック メカニズムです。
関数の宣言
Go の関数定義では、func
キーワードを使用し、その後に関数名とパラメーター リストを続けます:
func handleWebhook(w http.ResponseWriter, r *http.Request) { // 根据 Webhook 内容处理逻辑... }
イベント処理
Webhook イベントを処理する基本プロセスには次のものが含まれます。
実践的なケース: Github Webhook の処理
Github は、コード ウェアハウス内でイベントが発生したときに通知を送信するための Webhook API (マスター ブランチへのプッシュなど) を提供します。 )。 Go では、次のコードを使用して Github Webhook を処理できます:
import ( "encoding/json" "fmt" "github.com/google/go-github/github" "github.com/google/go-github/v32/github/apps" "net/http" ) // GithubWebhookHandler 处理 Github Webhook 请求。 func GithubWebhookHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, "Invalid request method", 405) return } webhookID := r.Header.Get("X-Github-Delivery") msg, err := github.ValidatePayload(r, []byte(webhookSecret)) if err != nil { http.Error(w, fmt.Sprintf("Validation failed: %s", err), 401) return } var event github.WebhookEvent if err := json.Unmarshal(msg, &event); err != nil { http.Error(w, fmt.Sprintf("Unmarshaling failed: %s", err), 400) return } switch event.Type { case "pull_request": handlePullRequestEvent(&event, w) case "push": handlePushEvent(&event, w) default: fmt.Fprintf(w, "Received webhook event of type %s", event.Type) } } // handlePullRequestEvent 处理 pull_request Webhook 事件。 func handlePullRequestEvent(event *github.WebhookEvent, w http.ResponseWriter) { if e, ok := event.Payload.(*github.PullRequestEvent); ok { if *e.Action == "closed" { if e.PullRequest.Merged != nil && *e.PullRequest.Merged { fmt.Fprintf(w, "Pull request %d was merged.", *e.Number) } else { fmt.Fprintf(w, "Pull request %d was closed.", *e.Number) } } } } // handlePushEvent 处理 push Webhook 事件。 func handlePushEvent(event *github.WebhookEvent, w http.ResponseWriter) { if e, ok := event.Payload.(*github.PushEvent); ok { fmt.Fprintf(w, "Push event received: %+v", e) } }
以上がWeb フックの処理における Golang 関数の適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。