Rumah >pembangunan bahagian belakang >Golang >Aplikasi fungsi Golang dalam memproses cangkuk web

Aplikasi fungsi Golang dalam memproses cangkuk web

王林
王林asal
2024-05-04 12:36:01837semak imbas

Cara menggunakan fungsi untuk mengendalikan Webhooks dalam Go: Gunakan func untuk mengisytiharkan fungsi untuk mengendalikan permintaan HTTP. Parsing badan permintaan, sahkan tandatangan atau token, dan cetuskan logik pemprosesan yang sepadan. Ia boleh digunakan sebagai kes praktikal untuk memproses Github Webhook, menggunakan API Webhook Github untuk mencetuskan logik pemprosesan yang berbeza apabila peristiwa tertentu berlaku, seperti memproses Permintaan Tarik atau peristiwa Tekan.

Aplikasi fungsi Golang dalam memproses cangkuk web

Gunakan fungsi untuk mengendalikan webhooks dalam Go

Menggunakan fungsi dalam Go ialah cara yang cekap dan ringan untuk mengendalikan webhooks. Webhooks ialah mekanisme panggil balik HTTP yang membenarkan aplikasi pihak ketiga menerima pemberitahuan apabila peristiwa tertentu berlaku.

Pengisytiharan fungsi

Takrifan fungsi dalam Go menggunakan kata kunci func, diikuti dengan nama fungsi dan senarai parameter:

func handleWebhook(w http.ResponseWriter, r *http.Request) {
    // 根据 Webhook 内容处理逻辑...
}

Pemprosesan acara

Proses asas memproses acara Webhook termasuk:

badan permintaan.
  1. Sahkan kesahihan permintaan (cth. pengesahan tandatangan atau token).
  2. Cetuskan logik pemprosesan yang sesuai berdasarkan jenis acara.
Kes praktikal: Mengendalikan Github Webhook

Github menyediakan API Webhook untuk menghantar pemberitahuan apabila peristiwa berlaku dalam repositori kod (seperti menolak ke cawangan induk). Dalam Go, kita boleh menggunakan kod berikut untuk mengendalikan Github Webhooks:

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)
    }
}

Atas ialah kandungan terperinci Aplikasi fungsi Golang dalam memproses cangkuk web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn