Envoi de SMS en Go (Golang) : intégration avec l'API de la bibliothèque

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 SendSMS pour 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

Recommendations