Envoi de SMS en Go (Golang) : API de la bibliothèque golang-sms

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) : API de la bibliothèque pour travailler avec les passerelles SMS



Dans le développement web moderne, l'envoi de messages SMS reste une fonctionnalité très demandée : authentification à deux facteurs, notifications, campagnes marketing. Le langage Go (Golang), grâce à ses performances et sa simplicité, est idéal pour créer des microservices dédiés à l'envoi de messages. Dans cet article, nous allons voir comment se connecter à une passerelle SMS via une API, en utilisant la bibliothèque standard net/http et des packages populaires pour gérer les requêtes HTTP.



Choix de l'approche : bibliothèque standard vs frameworks



Go fournit une bibliothèque standard puissante, suffisante pour travailler avec n'importe quelle API REST. Pour envoyer des SMS, il n'est pas nécessaire d'installer des frameworks lourds — le package intégré net/http est suffisant. Cependant, pour plus de commodité, nous examinerons également l'utilisation de la bibliothèque resty, qui simplifie la création de requêtes.



Structure de base d'une requête HTTP en Go



Toute passerelle SMS accepte une requête POST avec un corps JSON. Voici un exemple d'envoi de message via un service hypothétique sms-provider.com :



package main

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

type SMSRequest struct { Phone string `json:"phone"` Message string `json:"message"` APIKey string `json:"api_key"`}

type SMSResponse struct { Status string `json:"status"` Message string `json:"message"`}

func sendSMS(phone, message, apiKey string) (*SMSResponse, error) { url := "https://api.sms-provider.com/v1/send"

reqBody := SMSRequest{ Phone: phone, Message: message, APIKey: apiKey, }

jsonData, err := json.Marshal(reqBody) if err != nil { return nil, fmt.Errorf("erreur de sérialisation JSON : %w", err) }

client := &http.Client{Timeout: 10 * time.Second} resp, err := client.Post(url, "application/json", bytes.NewBuffer(jsonData)) if err != nil { return nil, fmt.Errorf("erreur de requête HTTP : %w", err) } defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("erreur de lecture de la réponse : %w", err) }

var smsResp SMSResponse if err := json.Unmarshal(body, &smsResp); err != nil { return nil, fmt.Errorf("erreur d'analyse de la réponse : %w", err) }

return &smsResp, nil}

func main() { resp, err := sendSMS("+79123456789", "Message de test", "your-api-key-123") if err != nil { fmt.Printf("Erreur : %v", err) return } fmt.Printf("Statut : %s, Message : %s", resp.Status, resp.Message)}


Utilisation de la bibliothèque resty pour simplifier le code



La bibliothèque go-resty/resty/v2 réduit considérablement la quantité de code boilerplate. Installation :



go get github.com/go-resty/resty/v2


Exemple d'envoi de SMS avec resty :



package main

import ( "fmt" "github.com/go-resty/resty/v2")

type SMSResponse struct { Status string `json:"status"` Message string `json:"message"`}

func sendSMSResty(phone, message, apiKey string) (*SMSResponse, error) { client := resty.New() resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetBody(map[string]interface{}{ "phone": phone, "message": message, "api_key": apiKey, }). SetResult(&SMSResponse{}). Post("https://api.sms-provider.com/v1/send")

if err != nil { return nil, fmt.Errorf("erreur de requête : %w", err) }

return resp.Result().(*SMSResponse), nil}

func main() { resp, err := sendSMSResty("+79123456789", "Bonjour depuis Go!", "my-secret-key") if err != nil { fmt.Prin

Recommendations