Отправка SMS на Rust: Обзор API и библиотек
Rust — это современный системный язык программирования, который сочетает в себе высокую производительность и безопасность памяти. Несмотря на то, что экосистема Rust моложе, чем у Python или JavaScript, в ней уже есть все необходимые инструменты для интеграции с SMS-сервисами. В этой статье мы рассмотрим, как отправлять SMS-сообщения из Rust-приложений с помощью популярных API и библиотек.
Основные подходы к отправке SMS
Существует два основных способа отправки SMS из Rust:
- Использование HTTP-клиента — прямой вызов REST API SMS-провайдера (Twilio, Vonage, SMS-Центр и др.)
- Использование специализированных крейтов — готовых библиотек, которые оборачивают API провайдера в удобный Rust-интерфейс
Вариант 1: Отправка SMS через Twilio API
Twilio — один из самых популярных сервисов для отправки SMS. Для работы с ним вам понадобятся reqwest (HTTP-клиент) и serde (сериализация/десериализация JSON).
// Cargo.toml
[dependencies]
reqwest = { version = "0.12", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1", features = ["full"] }
// main.rs
use reqwest::Client;
use serde::{Deserialize, Serialize};
#[derive(Serialize)]
struct TwilioSmsRequest {
To: String,
From: String,
Body: String,
}
#[derive(Deserialize, Debug)]
struct TwilioSmsResponse {
sid: String,
status: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let account_sid = "YOUR_TWILIO_ACCOUNT_SID";
let auth_token = "YOUR_TWILIO_AUTH_TOKEN";
let from_number = "+1234567890"; // Номер, купленный в Twilio
let to_number = "+0987654321";
let client = Client::new();
let url = format!("https://api.twilio.com/2010-04-01/Accounts/{}/Messages.json", account_sid);
let request_body = TwilioSmsRequest {
To: to_number.to_string(),
From: from_number.to_string(),
Body: "Привет из Rust!".to_string(),
};
let response = client
.post(&url)
.basic_auth(account_sid, Some(auth_token))
.form(&request_body)
.send()
.await?;
let sms_response: TwilioSmsResponse = response.json().await?;
println!("SMS отправлено! SID: {}, Статус: {}", sms_response.sid, sms_response.status);
Ok(())
}
Вариант 2: Использование крейта twilio
Для более удобной работы с Twilio существует специализированный крейт twilio. Он предоставляет типизированный API и автоматически обрабатывает авторизацию.
// Cargo.toml
[dependencies]
twilio = "0.5"
tokio = { version = "1", features = ["full"] }
// main.rs
use twilio::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new(
"YOUR_TWILIO_ACCOUNT_SID",
"YOUR_TWILIO_AUTH_TOKEN"
);
let message = client
.send_message("+1234567890", "+0987654321", "Hello from Rust!")
.await?;
println!("Сообщение отправлено! SID: {}", message.sid);
Ok(())
}
Вариант 3: Отправка SMS через Vonage (Nexmo)
Vonage (ранее Nexmo) — еще один популярный провайдер. Для работы с ним можно использовать крейт vonage.
// Cargo.toml
[dependencies]
vonage = "0.2"
tokio = { version = "1", features = ["full"] }
// main.rs
use vonage::VonageClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = VonageClient::new(
"YOUR_VONAGE_API_KEY",
"YOUR_VONAGE_API_SECRET"
);
let response = client
.send_sms("VonageAPI", "79001234567", "Привет из Rust!")
.await?;
println!("Статус: {:?}", response.messages[0].status);
Ok(())
}
Вариант 4: Универсальный HTTP-клиент для любого провайдера
Если ваш SMS-провайдер не имеет готового крейта, вы всегда можете написать универсальный HTTP-запрос. Ниже пример для абстрактного API.
use reqwest::Client;
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client:: Также в библиотеке
CLI-фреймворки для PHP: Symfony Console и Laravel Zero — полное руководство
Генератор QR-кодов на Swift: библиотека EFQRCode для iOS и macOS
Работа с изображениями в C# (.NET): библиотеки, инструменты и примеры
Elasticsearch клиент для Go (Golang): полное руководство по работе с ES