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
SendSMSzum 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 Auch in der Bibliothek
Markdown-Verarbeitung in Node.js: Bibliotheken marked, showdown und remarkable
rustls für Rust: Vollständiges Tutorial mit Beispielen
Caching in C++: Cache++ Bibliothek