𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗮 𝗧𝘆𝗽𝗲-𝗦𝗮𝗳𝗲 𝗩𝗶𝗱𝗲𝗼 𝗔𝗣𝗜 𝗦𝗗𝗞 𝗶𝗻 𝗥𝘂𝘀𝘁

डेटा करप्शन (Data corruption) अक्सर बिना किसी चेतावनी के होता है।

पिछली तिमाही में, मेरे बैकएंड ने आठ क्षेत्रों से वीडियो मेटाडेटा निकाला। पुराना सिस्टम एक PHP स्क्रिप्ट का उपयोग करता था। यह तब तक काम करता रहा जब तक कि एक प्रोवाइडर ने एक फ़ील्ड नहीं बदल दी। एक गलत (malformed) टाइमस्टैम्प के कारण स्क्रिप्ट ने हमारे डेटाबेस में कचरा (garbage) रोज़ लिख दिए।

हमने तीन दिनों तक इस पर ध्यान नहीं दिया। सिस्टम क्रैश नहीं हुआ। इसने बस उपयोगकर्ताओं को खाली शीर्षक (empty titles) दिखाए।

मैंने फेच लेयर (fetch layer) को Rust SDK से बदल दिया। मैंने Rust को इसलिए चुना क्योंकि reqwest और serde एक सख्त डेटा कॉन्ट्रैक्ट (data contract) लागू करते हैं। यदि डेटा गलत है, तो सिस्टम बाउंड्री पर ही स्पष्ट रूप से विफल हो जाता है। यह डेटाबेस में गलत डेटा नहीं लिखता है।

यहाँ बताया गया है कि हमने इसे कैसे बनाया:

• डेटा कॉन्ट्रैक्ट (Data Contract) को परिभाषित करें मैंने serde का उपयोग यह परिभाषित करने के लिए किया कि एक वीडियो बिल्कुल कैसा दिखता है। मैंने उन फ़ील्ड्स के लिए Option का उपयोग किया जो गायब हो सकते हैं। मैंने विभिन्न डेट फॉर्मेट को संभालने के लिए टाइमस्टैम्प के लिए एक कस्टम डिसेरियलाइज़र (deserializer) का उपयोग किया। यह पुराने सिस्टमों में होने वाली "1970-01-01" वाली त्रुटि को रोकता है।

• त्रुटियों (Errors) को वर्गीकृत करें एक अच्छा SDK आपको बताता है कि अनुरोध (request) क्यों विफल हुआ। मैंने एक विशिष्ट त्रुटि सूची बनाने के लिए thiserror का उपयोग किया। मैंने रेट लिमिट (rate limits) जैसी क्षणिक त्रुटियों (transient errors) को अनधिकृत एक्सेस (unauthorized access) जैसी घातक त्रुटियों (fatal errors) से अलग कर दिया। यह सिस्टम को संसाधन बर्बाद करने के बजाय स्मार्ट निर्णय लेने और पुनः प्रयास (retry) करने की अनुमति देता है।

• कनेक्शन प्रबंधित करें मैंने कनेक्शन पूल बनाए रखने के लिए reqwest::Client का उपयोग किया। यह प्रत्येक अनुरोध के लिए नए TLS हैंडशेक शुरू करने के ओवरहेड से बचाता है।

• स्ट्रीम्स (Streams) के साथ लॉजिक को सरल बनाएं मैंने पेजिनेशन (pagination) को संभालने के लिए async_stream का उपयोग किया। कॉलर (caller) को पेज टोकन प्रबंधित करने की आवश्यकता नहीं है। वे बस वीडियो की एक स्ट्रीम के माध्यम से इटरेट (iterate) करते हैं।

परिणाम एक ऐसा सिस्टम है जो डेटाबेस की रक्षा करता है। मुख्य वेबसाइट अभी भी PHP पर चलती है। डेटाबेस अभी भी SQLite है। लेकिन अब डेटाबेस में जाने वाला डेटा साफ होने की गारंटी है।

टाइप सेफ्टी (type safety) प्राप्त करने के लिए आपको अपने पूरे ऐप को फिर से लिखने की आवश्यकता नहीं है। आपको केवल वैलिडेशन (validation) को उस बिंदु पर ले जाने की आवश्यकता है जहाँ डेटा आपके सिस्टम में प्रवेश करता है।

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