Rust میں ایک Type-Safe ویڈیو API SDK بنانا
ڈیٹا کی خرابی (Data corruption) اکثر خاموشی سے ہوتی ہے۔
گزشتہ سہ ماہی میں، میرے بیک اینڈ نے آٹھ مختلف علاقوں سے ویڈیو میٹا ڈیٹا (metadata) حاصل کیا۔ پرانا سسٹم ایک PHP اسکرپٹ استعمال کرتا تھا۔ یہ تب تک ٹھیک کام کرتا رہا جب تک کہ ایک فراہم کنندہ (provider) نے ایک فیلڈ تبدیل نہیں کر دی۔ ایک غلط فارمیٹ شدہ ٹائم اسٹیمپ (timestamp) کی وجہ سے اسکرپٹ نے ہمارے ڈیٹا بیس میں غلط ڈیٹا (garbage rows) لکھنا شروع کر دیا۔
ہمیں تین دن تک اس کا علم نہیں ہوا۔ سسٹم کریش نہیں ہوا۔ اس نے صرف صارفین کو خالی عنوانات (titles) دکھائے۔
میں نے فیچ لیئر (fetch layer) کو Rust SDK سے بدل دیا۔ میں نے Rust کا انتخاب اس لیے کیا کیونکہ reqwest اور serde ایک سخت ڈیٹا کنٹریکٹ (data contract) نافذ کرتے ہیں۔ اگر ڈیٹا غلط ہو، تو سسٹم سرحد (boundary) پر ہی واضح طور پر ناکام ہو جاتا ہے۔ یہ ڈیٹا بیس میں غلط ڈیٹا نہیں لکھتا۔
ہم نے اسے اس طرح بنایا:
• ڈیٹا کنٹریکٹ (Data Contract) کی تعریف کریں
میں نے بالکل یہ طے کرنے کے لیے کہ ایک ویڈیو کیسی دکھتی ہے، serde کا استعمال کیا۔ میں نے ان فیلڈز کے لیے Option کا استعمال کیا جو شاید موجود نہ ہوں۔ میں نے مختلف تاریخوں کے فارمیٹس کو سنبھالنے کے لیے ٹائم اسٹیمپ کے لیے ایک کسٹم ڈیزیریا لائزر (custom deserializer) کا استعمال کیا۔ یہ پرانے سسٹمز میں عام ہونے والی "1970-01-01" والی غلطی کو روکتا ہے۔
• غلطیوں کی درجہ بندی کریں (Categorize Errors)
ایک اچھا SDK آپ کو بتاتا ہے کہ درخواست (request) کیوں ناکام ہوئی۔ میں نے مخصوص غلطیوں کی فہرست بنانے کے لیے thiserror کا استعمال کیا۔ میں نے ریٹ لمٹس (rate limits) جیسی عارضی غلطیوں کو غیر مجاز رسائی (unauthorized access)