Rust ile Tip Güvenli Bir Video API SDK'sı Oluşturmak

Veri bozulması genellikle sessiz gerçekleşir.

Geçen çeyrekte, backend sistemim sekiz farklı bölgeden video meta verilerini çekiyordu. Eski sistem bir PHP betiği kullanıyordu. Bir sağlayıcı bir alanı değiştirene kadar sorunsuz çalışıyordu. Tek bir hatalı zaman damgası (timestamp), betiğin veritabanımıza çöp satırlar yazmasına neden oldu.

Bunu üç gün boyunca fark etmedik. Sistem çökmedi; sadece kullanıcılara boş başlıklar gösterdi.

Veri çekme katmanını bir Rust SDK ile değiştirdim. Rust'ı seçtim çünkü reqwest ve serde katı bir veri sözleşmesi (data contract) dayatıyor. Eğer veri yanlışsa, sistem sınırda (boundary) açıkça hata verir. Veritabanına hatalı veri yazmaz.

İşte nasıl inşa ettiğimiz:

• Veri Sözleşmesini Tanımlayın Bir videonun tam olarak neye benzediğini tanımlamak için serde kullandım. Eksik olabilecek alanlar için Option kullandım. Farklı tarih formatlarını işlemek için zaman damgaları için özel bir deserializer kullandım. Bu, eski sistemlerde yaygın olan "1970-01-01" hatasını önler.

• Hataları Kategorize Edin İyi bir SDK, bir isteğin neden başarısız olduğunu size söyler. Özel bir hata listesi oluşturmak için thiserror kullandım. Hız sınırları (rate limits) gibi geçici hataları, yetkisiz erişim gibi kritik hatalardan ayırdım. Bu, sistemin kaynakları boşa harcamak yerine akıllıca yeniden deneme kararları vermesini sağlar.

• Bağlantıları Yönetin Bir bağlantı havuzu (connection pool) sürdürmek için reqwest::Client kullandım. Bu, her istek için yeni TLS el sıkışmaları (handshakes) başlatmanın getirdiği ek yükü önler.

• Akışlar (Streams) ile Mantığı Basitleştirin Sayfalandırmayı (pagination) yönetmek için async_stream kullandım. Çağıran tarafın sayfa jetonlarını (page tokens) yönetmesine gerek kalmaz; sadece bir video akışı üzerinden iterasyon yaparlar.

Sonuç, veritabanını koruyan bir sistem oldu. Ana web sitesi hâlâ PHP ile çalışıyor. Veritabanı hâlâ SQLite. Ancak veritabanına giren verilerin temiz olması artık garanti altında.

Tip güvenliği sağlamak için tüm uygulamanızı yeniden yazmanıza gerek yok. Sadece doğrulamayı (validation), verinin sisteminize girdiği noktaya taşımanız yeterlidir.

Kaynak: https://dev.to/ahmet_gedik778845/building-a-type-safe-video-api-sdk-in-rust-with-reqwest-and-serde-41bf