Web フックの処理における Golang 関数の適用

王林
リリース: 2024-05-04 12:36:01
オリジナル
804 人が閲覧しました

Go で関数を使用して Webhook を処理する方法: func を使用して、HTTP リクエストを処理する関数を宣言します。リクエスト本文を解析し、署名またはトークンを検証し、対応する処理ロジックをトリガーします。これは、Github Webhook API を使用して、プル リクエストやプッシュ イベントの処理など、特定のイベントが発生したときにさまざまな処理ロジックをトリガーする、Github Webhook を処理するための実際的なケースとして使用できます。

Web フックの処理における Golang 関数の適用

Go で関数を使用して Webhook を処理する

Go で関数を使用することは、Webhook を処理するための効率的かつ軽量な方法です。 。 Webhook は、特定のイベントが発生したときにサードパーティ アプリケーションが通知を受信できるようにする HTTP コールバック メカニズムです。

関数の宣言

Go の関数定義では、func キーワードを使用し、その後に関数名とパラメーター リストを続けます:

func handleWebhook(w http.ResponseWriter, r *http.Request) {
    // 根据 Webhook 内容处理逻辑...
}
ログイン後にコピー

イベント処理

Webhook イベントを処理する基本プロセスには次のものが含まれます。

  1. リクエスト本文を解析します。
  2. リクエストの正当性を検証します (署名やトークンの検証など)。
  3. イベント タイプに基づいて適切な処理ロジックをトリガーします。

実践的なケース: 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!