Envoi de SMS en Rust : Bibliothèque API pour l'intégration avec les services 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 Rust : Guide complet d'utilisation de la bibliothèque API



Dans le monde moderne du développement en Rust, l'envoi de messages SMS devient une tâche standard pour de nombreuses applications — des systèmes d'authentification à deux facteurs aux notifications utilisateur. Dans cet article, nous allons détailler comment implémenter l'envoi de SMS en Rust à l'aide d'une API HTTP, en utilisant des bibliothèques et des approches populaires.



Pourquoi Rust est-il idéal pour l'intégration SMS ?

Rust offre une gestion sécurisée de la mémoire, des performances élevées et un excellent support de la programmation asynchrone. Cela en fait un excellent choix pour créer des services d'envoi de messages fiables, où la stabilité et la rapidité de traitement des requêtes sont cruciales.



Bibliothèques principales pour travailler avec HTTP en Rust

Pour interagir avec les fournisseurs SMS via une API REST, les crates suivants sont le plus souvent utilisés :

  • reqwest — le client HTTP le plus populaire pour Rust. Il prend en charge les requêtes asynchrones et synchrones, le travail avec JSON, les en-têtes et l'authentification.
  • serde — une bibliothèque pour la sérialisation et la désérialisation des données (nécessaire pour traiter les réponses JSON de l'API).
  • tokio — un runtime asynchrone requis pour travailler avec reqwest asynchrone.
  • dotenv — pour stocker en toute sécurité les clés API et les configurations.


Structure de base du projet

Commençons par créer un nouveau projet et ajouter les dépendances dans Cargo.toml :



[package]name = "sms_sender"version = "0.1.0"edition = "2021"

[dependencies]reqwest = { version = "0.12", features = ["json"] }tokio = { version = "1", features = ["full"] }serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"dotenv = "0.15"


Connexion au fournisseur SMS

La plupart des services SMS (par exemple, Twilio, Vonage, SMS-Centre) fournissent une API REST. Examinons un modèle de connexion général en prenant l'exemple d'un fournisseur hypothétique.



Créons un fichier .env pour stocker les données confidentielles :

API_KEY=your_api_key_hereAPI_SECRET=your_api_secret_hereSENDER_NAME=MyApp


Structures de données pour la requête et la réponse

Définissons les types pour travailler avec l'API à l'aide de Serde :



use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize)]struct SmsRequest { api_key: String, to: String, message: String, sender: String,}

#[derive(Debug, Deserialize)]struct SmsResponse { status: String, message_id: Option<String>, error: Option<String>,}


Implémentation de la fonction d'envoi de SMS

Écrivons maintenant la fonction principale pour envoyer un message :



use dotenv::dotenv;use std::env;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { dotenv().ok();

let api_key = env::var("API_KEY")?; let api_secret = env::var("API_SECRET")?; let sender = env::var("SENDER_NAME")?;

let client = reqwest::Client::new();

let sms_request = SmsRequest { api_key: api_key.clone(), to: "+79123456789".to_string(), message: "Bonjour ! Ceci est un SMS de test depuis une application Rust.".to_string(), sender: sender.clone(), };

let response = client .post("https://api.smsprovider.com/v1/send") .basic_auth(&api_key, Some(&api_secret)) .json(&sms_request) .send() .await?;

let sms_response: SmsResponse = response.json().await?;

if sms_response.status == "success" { println!("SMS envoyé ! ID : {:?}", sms_response.message_id); } else { eprintln!("Erreur d'envoi : {:?}", sms_response.error); }

Ok(())}


Gestion des erreurs et tentatives de réessai

Dans les applications réelles, il est important de gérer correctement

Recommendations