SMS-Versand mit Go (Golang): Integration mit API-Bibliothek

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

SMS-Versand mit Go (Golang): Integration mit API-Bibliothek



In der modernen Welt bleibt das Versenden von SMS-Nachrichten eine gefragte Funktion für die Benutzerverifizierung, Benachrichtigungen und Marketingkampagnen. Mit Go (Golang) lässt sich dies dank der integrierten Werkzeuge für die Arbeit mit HTTP und JSON einfach und effizient umsetzen. In diesem Artikel werden wir erläutern, wie man eine eigene Bibliothek zum Versenden von SMS über eine REST-API mit Go schreibt. Das Beispiel basiert auf einem abstrakten Anbieter, der Code lässt sich jedoch leicht an jeden Dienst anpassen (Twilio, SMS.ru, Vonage usw.).



Architektur der Bibliothek

Unsere Bibliothek wird aus den folgenden Komponenten bestehen:

  • Client für HTTP-Anfragen mit Unterstützung für Timeouts und Wiederholungsversuche
  • Strukturen für die Anfrage (Nummer, Text, Absender) und die Antwort (Status, Nachrichten-ID, Fehler)
  • Initialisierungsfunktion mit API-Schlüssel und Basis-URL
  • Methode SendSMS zum Versenden einer einzelnen Nachricht


Installation und Vorbereitung

Für die Arbeit wird nur die Standardbibliothek von Go benötigt (net/http, encoding/json). Es sind keine externen Abhängigkeiten erforderlich. Erstellen Sie eine Datei sms.go und binden Sie das Paket ein:

package smsclient

import ( "bytes" "encoding/json" "fmt" "net/http" "time")


Datenstrukturen

Definieren wir die Typen für Anfrage und Antwort:

// SMSRequest repräsentiert den Anfragetext an die APItype SMSRequest struct {    To      string `json:"to"`      // Empfängernummer im internationalen Format    Text    string `json:"text"`    // Nachrichtentext    Sender  string `json:"sender"`  // Absendername (Alphaname)}

// SMSResponse enthält das Sendeergebnistype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}


Client für die Arbeit mit der API

Erstellen wir eine Client-Struktur mit Konfiguration:

// Client verwaltet den SMS-Versand über die APItype Client struct {    apiKey    string    baseURL   string    httpClient *http.Client}

// NewClient erstellt eine neue Client-Instanzfunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}


Methode zum SMS-Versand

Implementieren wir die Hauptlogik – das Senden einer POST-Anfrage mit JSON-Text:

// SendSMS sendet eine SMS und gibt die Antwort der API zurückfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) {    // 1. Serialisieren der Anfrage in JSON    body, err := json.Marshal(req)    if err != nil {        return nil, fmt.Errorf("Fehler beim Marshalling der Anfrage: %w", err)    }

// 2. Erstellen der HTTP-Anfrage httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("Fehler beim Erstellen der Anfrage: %w", err) }

// 3. Setzen der Header httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)

// 4. Ausführen der Anfrage resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("Fehler beim Ausführen der Anfrage: %w", err) } defer resp.Body.Close()

// 5. Dekodieren der Antwort var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("Fehler beim Dekodieren der Antwort: %w", err) }

// 6. Überprüfen des HTTP-Statuscodes if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("API gab Code %d zurück: %s", resp.StatusCode, smsResp.Error) }

return &smsResp, nil}


Anwendungsbeispiel

Jetzt zeigen wir, wie die Bibliothek in echtem Code verwendet wird:

package main

impo

Empfehlungen