Skip to content

Latest commit

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Nodesty Rust API Client

API
Author

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ü serde ile
  • ⚙️ 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

ServisAçıklamaErişim
User ServiceKullanıcı profili, hizmetler, faturalar, destek biletleriUserApiService
VPS ServiceVPS yönetimi, yedekler, şifre değişimi, istatistiklerVpsApiService
Dedicated ServiceDedicated sunucu yönetimi, donanım bilgileriDedicatedServerApiService
Firewall ServicenShield kuralları, saldırı logları, rDNS yönetimiFirewallApiService

🛠️ 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]asyncfnmain() -> 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{ifletSome(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:

pubstructApiResponse<T>{pubsuccess:bool,puberror:Option<String>,pubdata: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)

MetodAçıklamaEndpoint
get_current_user()Kullanıcı profilini alGET /users/@me
get_services()Hizmetleri listeleGET /services
get_tickets()Destek biletlerini listeleGET /tickets
get_ticket(id)Belirli bileti getirGET /tickets/{id}
get_invoices()Faturaları listeleGET /users/@me/invoices
get_invoice(id)Belirli faturayı getirGET /users/@me/invoices/{id}
get_sessions()Aktif oturumları getirGET /users/@me/sessions

🖥️ VPS Service (VpsApiService)

MetodAçıklamaEndpoint
perform_action()VPS eylemi gerçekleştirPOST /services/{id}/vps/action
get_backups()Yedekleri getirGET /services/{id}/vps/backups
restore_backup()Geri yükleme yapPOST /services/{id}/vps/backups/...
change_password()Şifre değiştirPOST /services/{id}/vps/change-password
get_usage_statistics()İstatistikleri alGET /services/{id}/vps/graphs
get_details()VPS detaylarıGET /services/{id}/vps/info
get_os_templates()OS şablonlarını getirGET /services/{id}/vps/os-templates
reinstall()Yeniden kurulumPOST /services/{id}/vps/reinstall
get_tasks()Görevleri getirGET /services/{id}/vps/tasks

🔧 Dedicated Service (DedicatedServerApiService)

MetodAçıklamaEndpoint
perform_action()Eylem çalıştırPOST /services/{id}/dedicated/action
get_details()Sunucu bilgisiGET /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 durumuGET /services/{id}/dedicated/reinstall-status
reinstall()Yeniden kurPOST /services/{id}/dedicated/reinstall
get_tasks()Görevleri getirGET /services/{id}/dedicated/tasks

🛡️ Firewall Service (FirewallApiService)

MetodAçıklamaEndpoint
get_attack_logs()Saldırı kayıtlarını getirGET /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üncellePUT /services/{id}/firewall/{ip}/attack-notification
reset_reverse_dns()rDNS kaldırDELETE /services/{id}/firewall/{ip}/rdns
get_reverse_dns()rDNS bilgisiGET /services/{id}/firewall/{ip}/rdns
upsert_reverse_dns()rDNS ayarlaPUT /services/{id}/firewall/{ip}/rdns
delete_rule()Kural silDELETE /services/{id}/firewall/{ip}/rules/{rule_id}
get_rules()Kuralları getirGET /services/{id}/firewall/{ip}/rules
create_rule()Kural oluşturPOST /services/{id}/firewall/{ip}/rules
get_statistics()İstatistikleri getirGET /services/{id}/firewall/{ip}/stats

🔐 Güvenlik İpuçları

  • Token'ı .env dosyasından veya ortam değişkeninden alın
  • Her ApiResponse sonrası .success kontrolü yapın
  • Hataları match veya if let ile detaylı yönetin

🚀 Performans Önerileri

  • tokio::join! ile işlemleri paralel çalıştırın
  • Rate limit için rate_limit_offset_ms yapılandırmasını ayarlayın
  • Uygulama başında istemciyi bir kez oluşturun ve tekrar kullanın

🧪 Test Örneği

#[tokio::test]asyncfntest_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_ms değerini artırın veya daha az istek gönderin

🤝 Katkıda Bulunma

  1. Repo'yu forklayın
  2. Yeni bir branch oluşturun (git checkout -b feature/harika-ozellik)
  3. Commit ve push yapın
  4. PR gönderin

🔗 Bağlantılar


⭐ Destek

Bu proje faydalı olduysa ⭐ vererek destekleyebilirsiniz!

Made with ❤️ for Nodesty Community.

About

Nodesty API Rust library.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages