Envoi de SMS en Go (Golang) : intégration avec l'API de la bibliothèque
Dans le monde moderne, l'envoi de messages SMS reste une fonctionnalité très demandée pour la vérification des utilisateurs, les notifications et les campagnes marketing. En Go (Golang), cela se réalise facilement et efficacement grâce aux outils intégrés pour travailler avec HTTP et JSON. Dans cet article, nous allons voir comment écrire votre propre bibliothèque pour envoyer des SMS via une API REST en utilisant Go. L'exemple sera basé sur un fournisseur abstrait, mais le code s'adapte facilement à n'importe quel service (Twilio, SMS.ru, Vonage, etc.).
Architecture de la bibliothèque
Notre bibliothèque sera composée des éléments suivants :
- Un client pour les requêtes HTTP avec prise en charge des timeouts et des tentatives
- Des structures pour la requête (numéro, texte, expéditeur) et la réponse (statut, ID du message, erreur)
- Une fonction d'initialisation avec une clé API et une URL de base
- Une méthode
SendSMSpour envoyer un seul message
Installation et préparation
Pour fonctionner, seule la bibliothèque standard de Go est nécessaire (net/http, encoding/json). Aucune dépendance externe n'est requise. Créez un fichier sms.go et importez le package :
package smsclient
import ( "bytes" "encoding/json" "fmt" "net/http" "time")Structures de données
Définissons les types pour la requête et la réponse :
// SMSRequest représente le corps de la requête à l'APItype SMSRequest struct { To string `json:"to"` // Numéro du destinataire au format international Text string `json:"text"` // Texte du message Sender string `json:"sender"` // Nom de l'expéditeur (alpha-nom)}
// SMSResponse contient le résultat de l'envoitype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}Client pour travailler avec l'API
Créons la structure du client avec la configuration :
// Client gère l'envoi de SMS via l'APItype Client struct { apiKey string baseURL string httpClient *http.Client}
// NewClient crée une nouvelle instance du clientfunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}Méthode d'envoi de SMS
Implémentons la logique principale — l'envoi d'une requête POST avec un corps JSON :
// SendSMS envoie un SMS et retourne la réponse de l'APIfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) { // 1. Sérialisons la requête en JSON body, err := json.Marshal(req) if err != nil { return nil, fmt.Errorf("erreur de marshaling de la requête : %w", err) }
// 2. Créons la requête HTTP httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("erreur de création de la requête : %w", err) }
// 3. Définissons les en-têtes httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)
// 4. Exécutons la requête resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("erreur d'exécution de la requête : %w", err) } defer resp.Body.Close()
// 5. Décodons la réponse var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("erreur de décodage de la réponse : %w", err) }
// 6. Vérifions le code de statut HTTP if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("l'API a retourné le code %d : %s", resp.StatusCode, smsResp.Error) }
return &smsResp, nil}Exemple d'utilisation
Montrons maintenant comment appliquer la bibliothèque dans un code réel :
package main
impo Aussi dans la bibliothèque
Mise en cache en Go (Golang) : Redis et outils alternatifs
Hibernate ORM : Un outil puissant pour travailler avec les bases de données en Java
Travailler avec les archives ZIP en Java : guide complet sur java.util.zip
Validation des données en JavaScript (Node.js) avec Joi et Yup