3 stable releases
Uses new Rust 2024
| 1.0.9 | Jul 7, 2025 |
|---|---|
| 1.0.4 |
|
| 1.0.3 |
|
| 1.0.2 |
|
#1788 in Network programming
217 downloads per month
45KB
1K
SLoC
Nodesty Rust API Client
nodesty.com'un güçlü API'sine Rust uygulamalarınızdan kolayca erişmenizi sağlayan modern, asenkron ve tip güvenli bir istemci kütüphanesi.
🚀 Özellikler
- ⚡ Asenkron Operasyonlar: Tam async destek!
- 🔒 Tip Güvenliği: Güçlü enum/struct yapılarıyla modelleme
- 🔄 Otomatik Serileştirme: JSON ↔ Rust veri tipleri dönüşümü
serdeile - ⚙️ Yapılandırılabilir: Timeout, retry, rate limit ayarları
- 🛡️ Kapsamlı Hata Yönetimi: Standart
ApiResponse<T>yapısı - 📦 Modüler Yapı: Her servis kendi modülü içinde
📋 Desteklenen Servisler
| Servis | Açıklama | Erişim |
|---|---|---|
| User Service | Kullanıcı profili, hizmetler, faturalar, destek biletleri | UserApiService |
| VPS Service | VPS yönetimi, yedekler, şifre değişimi, istatistikler | VpsApiService |
| Dedicated Service | Dedicated sunucu yönetimi, donanım bilgileri | DedicatedServerApiService |
| Firewall Service | nShield kuralları, saldırı logları, rDNS yönetimi | FirewallApiService |
🛠️ Kurulum
Terminalinizde aşağıdaki komutu çalıştırın:
cargo add nodesty-api-library
🔑 Başlangıç
API Token Alma
Nodesty dashboarddan bir erişim belirteci oluşturun.
Temel Kullanım
use nodesty_api_library::{
models::RestClientOptions,
NodestyApiClient,
services::{UserApiService, VpsApiService}
};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let token = std::env::var("NODESTY_API_TOKEN").expect("Token yok");
let options = RestClientOptions::new(token)
.with_timeout_ms(45_000)
.with_retry(5)
.with_rate_limit_offset_ms(100);
let client = Arc::new(NodestyApiClient::new(options)?);
let user_service = UserApiService::new(client.clone());
let vps_service = VpsApiService::new(client);
let user_response = user_service.get_current_user().await?;
if user_response.success {
if let Some(user) = user_response.data {
println!("Hoş geldin {}", user.full_name);
} else {
println!("Kullanıcı bilgisi bulunamadı.");
}
} else {
println!("Kullanıcı bilgisi getirilirken hata oluştu: {:?}", user_response.error);
}
Ok(())
}
📖 Kullanım Örnekleri
👤 Kullanıcı Bilgileri
let user_service = UserApiService::new(client.clone());
let res = user_service.get_current_user().await?;
if res.success {
let user = res.data.unwrap();
println!("Merhaba {}", user.full_name);
println!("Email: {}", user.email);
} else {
println!("Hata: {:?}", res.error);
}
🖥️ VPS Yönetimi
let vps_service = VpsApiService::new(client.clone());
let vps_id = "your-vps-id";
use nodesty_api_library::models::vps::VpsAction;
vps_service.perform_action(vps_id, VpsAction::Restart).await?;
let backups = vps_service.get_backups(vps_id).await?.data.unwrap();
for backup in backups {
println!("Yedek: {} - {}", backup.date, backup.file);
}
🔧 Dedicated Sunucu
let dedicated_service = DedicatedServerApiService::new(client.clone());
let id = "your-dedicated-id";
let res = dedicated_service.get_hardware_components(id).await?;
for part in res.data.unwrap() {
println!("{}: {} {}{}", part.component, part.model, part.value, part.value_suffix);
}
🛡️ Güvenlik Duvarı
let firewall_service = FirewallApiService::new(client.clone());
use nodesty_api_library::models::firewall::FirewallCreateRuleData;
let rule = FirewallCreateRuleData { port: 25565, app_id: 123 };
firewall_service.create_rule("svc-id", "ip", rule).await?;
let logs = firewall_service.get_attack_logs("svc-id", "ip").await?.data.unwrap();
for log in logs {
println!("Saldırı Başlangıcı: {} - Vektörler: {:?}", log.started_at, log.vectors);
}
🏗️ API Yanıt Yapısı
Tüm API çağrıları ApiResponse<T> döner:
pub struct ApiResponse<T> {
pub success: bool,
pub error: Option<String>,
pub data: Option<T>,
}
⚙️ Yapılandırma Seçenekleri
let options = RestClientOptions::new(token)
.with_timeout_ms(30_000)
.with_retry(3)
.with_rate_limit_offset_ms(50);
📚 API Servisleri
👤 User Service (UserApiService)
| Metod | Açıklama | Endpoint |
|---|---|---|
get_current_user() |
Kullanıcı profilini al | GET /users/@me |
get_services() |
Hizmetleri listele | GET /services |
get_tickets() |
Destek biletlerini listele | GET /tickets |
get_ticket(id) |
Belirli bileti getir | GET /tickets/{id} |
get_invoices() |
Faturaları listele | GET /users/@me/invoices |
get_invoice(id) |
Belirli faturayı getir | GET /users/@me/invoices/{id} |
get_sessions() |
Aktif oturumları getir | GET /users/@me/sessions |
🖥️ VPS Service (VpsApiService)
| Metod | Açıklama | Endpoint |
|---|---|---|
perform_action() |
VPS eylemi gerçekleştir | POST /services/{id}/vps/action |
get_backups() |
Yedekleri getir | GET /services/{id}/vps/backups |
restore_backup() |
Geri yükleme yap | POST /services/{id}/vps/backups/... |
change_password() |
Şifre değiştir | POST /services/{id}/vps/change-password |
get_usage_statistics() |
İstatistikleri al | GET /services/{id}/vps/graphs |
get_details() |
VPS detayları | GET /services/{id}/vps/info |
get_os_templates() |
OS şablonlarını getir | GET /services/{id}/vps/os-templates |
reinstall() |
Yeniden kurulum | POST /services/{id}/vps/reinstall |
get_tasks() |
Görevleri getir | GET /services/{id}/vps/tasks |
🔧 Dedicated Service (DedicatedServerApiService)
| Metod | Açıklama | Endpoint |
|---|---|---|
perform_action() |
Eylem çalıştır | POST /services/{id}/dedicated/action |
get_details() |
Sunucu bilgisi | GET /services/{id}/dedicated/info |
get_hardware_components() |
Donanım detayları | GET /services/{id}/dedicated/hardware |
get_os_templates() |
OS şablonları | GET /services/{id}/dedicated/os-templates |
get_reinstall_status() |
Kurulum durumu | GET /services/{id}/dedicated/reinstall-status |
reinstall() |
Yeniden kur | POST /services/{id}/dedicated/reinstall |
get_tasks() |
Görevleri getir | GET /services/{id}/dedicated/tasks |
🛡️ Firewall Service (FirewallApiService)
| Metod | Açıklama | Endpoint |
|---|---|---|
get_attack_logs() |
Saldırı kayıtlarını getir | GET /services/{id}/firewall/{ip}/attack-logs |
get_attack_notification_settings() |
Bildirim ayarları | GET /services/{id}/firewall/{ip}/attack-notification |
update_attack_notification_settings() |
Bildirim ayarlarını güncelle | PUT /services/{id}/firewall/{ip}/attack-notification |
reset_reverse_dns() |
rDNS kaldır | DELETE /services/{id}/firewall/{ip}/rdns |
get_reverse_dns() |
rDNS bilgisi | GET /services/{id}/firewall/{ip}/rdns |
upsert_reverse_dns() |
rDNS ayarla | PUT /services/{id}/firewall/{ip}/rdns |
delete_rule() |
Kural sil | DELETE /services/{id}/firewall/{ip}/rules/{rule_id} |
get_rules() |
Kuralları getir | GET /services/{id}/firewall/{ip}/rules |
create_rule() |
Kural oluştur | POST /services/{id}/firewall/{ip}/rules |
get_statistics() |
İstatistikleri getir | GET /services/{id}/firewall/{ip}/stats |
🔐 Güvenlik İpuçları
- Token'ı
.envdosyasından veya ortam değişkeninden alın - Her
ApiResponsesonrası.successkontrolü yapın - Hataları
matchveyaif letile detaylı yönetin
🚀 Performans Önerileri
tokio::join!ile işlemleri paralel çalıştırın- Rate limit için
rate_limit_offset_msyapılandırmasını ayarlayın - Uygulama başında istemciyi bir kez oluşturun ve tekrar kullanın
🧪 Test Örneği
#[tokio::test]
async fn test_user_service() -> Result<(), Box<dyn std::error::Error>> {
let token = std::env::var("NODESTY_TEST_TOKEN").unwrap();
let client = Arc::new(NodestyApiClient::new(RestClientOptions::new(token))?);
let user_service = UserApiService::new(client);
let response = user_service.get_current_user().await?;
assert!(response.success);
assert!(response.data.unwrap().email.contains("@"));
Ok(())
}
🐛 Sorun Giderme
- 401 Unauthorized: Token geçersiz veya süresi dolmuş olabilir
- Timeout: Ağ bağlantısını ve timeout süresini kontrol edin
- Rate Limiting:
rate_limit_offset_msdeğerini artırın veya daha az istek gönderin
🤝 Katkıda Bulunma
- Repo'yu forklayın
- Yeni bir branch oluşturun (
git checkout -b feature/harika-ozellik) - Commit ve push yapın
- PR gönderin
🔗 Bağlantılar
⭐ Destek
Bu proje faydalı olduysa ⭐ vererek destekleyebilirsiniz!
Made with ❤️ for Nodesty Community.
Dependencies
~6–21MB
~223K SLoC