Comment utiliser les fonctions pour gérer les Webhooks dans Go : utilisez func pour déclarer les fonctions permettant de gérer les requêtes HTTP. Analysez le corps de la demande, vérifiez la signature ou le jeton et déclenchez la logique de traitement correspondante. Il peut être utilisé comme cas pratique pour traiter Github Webhook, en utilisant l'API Github Webhook pour déclencher différentes logiques de traitement lorsque des événements spécifiques se produisent, tels que le traitement d'événements Pull Request ou Push.
Utilisez des fonctions pour gérer les webhooks dans Go
L'utilisation de fonctions dans Go est un moyen efficace et léger de gérer les webhooks. Les webhooks sont un mécanisme de rappel HTTP qui permet aux applications tierces de recevoir des notifications lorsque des événements spécifiques se produisent.
Déclaration de fonction
La définition de la fonction dans Go utilise le mot-clé func
, suivi du nom de la fonction et de la liste des paramètres :
func handleWebhook(w http.ResponseWriter, r *http.Request) { // 根据 Webhook 内容处理逻辑... }
Traitement des événements
Le processus de base de traitement des événements Webhook comprend :
Cas pratique : Gestion du Webhook de Github
Github fournit une API Webhook pour envoyer des notifications lorsque des événements se produisent dans le référentiel de code (comme le push vers la branche principale). Dans Go, nous pouvons utiliser le code suivant pour gérer les Webhooks Github :
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) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!