Rust मध्ये Type-Safe Video API SDK तयार करणे
डेटा करप्शन अनेकदा न कळता घडते.
गेल्या तिमाहीत, माझ्या बॅकएंडने आठ क्षेत्रांमधून (regions) व्हिडिओ मेटाडेटा खेचला. जुन्या सिस्टममध्ये PHP स्क्रिप्ट वापरली जात होती. जोपर्यंत एखाद्या प्रदात्याने (provider) एखादे फील्ड बदलले नाही, तोपर्यंत ती व्यवस्थित चालत होती. एका चुकीच्या टाइमस्टॅम्पमुळे (malformed timestamp) स्क्रिप्टने आमच्या डेटाबेसमध्ये चुकीच्या (garbage) ओळी लिहिल्या.
तीन दिवस आम्हाला याची जाणीव झाली नाही. सिस्टम क्रॅश झाली नाही. तिने फक्त वापरकर्त्यांना रिकामे टायटल्स दाखवले.
मी 'fetch layer' बदलून तिथे Rust SDK वापरले. मी Rust निवडले कारण reqwest आणि serde एक कडक डेटा कॉन्ट्रॅक्ट (data contract) लागू करतात. जर डेटा चुकीचा असेल, तर सिस्टम सीमेवरच (boundary) स्पष्टपणे त्रुटी दर्शवते. यामुळे डेटाबेसमध्ये चुकीचा डेटा लिहिला जात नाही.
आम्ही ते कसे तयार केले ते खालीलप्रमाणे आहे:
• डेटा कॉन्ट्रॅक्ट (Data Contract) परिभाषित करा व्हिडिओ नेमका कसा असावा हे परिभाषित करण्यासाठी मी serde वापरले. जे फील्ड्स गहाळ असू शकतात, त्यासाठी मी Option वापरले. विविध तारीख फॉरमॅट्स हाताळण्यासाठी मी टाइमस्टॅम्पसाठी कस्टम 'deserializer' वापरले. यामुळे जुन्या सिस्टममध्ये आढळणारी "1970-01-01" ही त्रुटी टाळता येते.
• त्रुटींचे वर्गीकरण करा (Categorize Errors) एक चांगले SDK तुम्हाला विनंती (request) का अयशस्वी झाली हे सांगते. मी विशिष्ट त्रुटींची यादी तयार करण्यासाठी thiserror वापरले. मी रेट लिमिट्ससारख्या तात्पुरत्या (transient) त्रुटी आणि अनधिकृत प्रवेशासारख्या (unauthorized access) गंभीर (fatal) त्रुटी वेगळ्या केल्या. यामुळे सिस्टम संसाधने वाया न घालवता हुशारीने पुन्हा प्रयत्न (retry) करू शकते.
• कनेक्शन्स व्यवस्थापित करा (Manage Connections) कनेक्शन पूल (connection pool) राखण्यासाठी मी reqwest::Client वापरले. यामुळे प्रत्येक विनंतीसाठी नवीन TLS handshakes सुरू करण्याचा अतिरिक्त भार (overhead) टाळता येतो.
• Streams सह लॉजिक सोपे करा पेजिनेशन (pagination) हाताळण्यासाठी मी async_stream वापरले. कॉल करणाऱ्याला पेज टोकन्स (page tokens) व्यवस्थापित करण्याची गरज नाही. ते फक्त व्हिडिओंच्या स्ट्रीममधून (stream) फिरू (iterate) शकतात.
याचा परिणाम म्हणजे डेटाबेसचे संरक्षण करणारी एक सिस्टम तयार झाली आहे. मुख्य वेबसाइट अजूनही PHP वर चालते. डेटाबेस अजूनही SQLite आहे. परंतु, आता डेटाबेसमध्ये जाणारा डेटा स्वच्छ (clean) असल्याची खात्री मिळते.
टाइप सेफ्टी (type safety) मिळवण्यासाठी तुम्हाला तुमचे संपूर्ण ॲप पुन्हा लिहिण्याची गरज नाही. तुम्हाला फक्त डेटा तुमच्या सिस्टममध्ये प्रवेश करतो त्या ठिकाणी व्हॅलिडेशन (validation) हलवण्याची गरज आहे.