Kujenga SDK ya Video API yenye Type-Safe katika Rust
Uharibifu wa data mara nyingi hutokea bila kuonekana.
Robo mwaka iliyopita, backend yangu ilichukua metadata za video kutoka maeneo nane. Mfumo wa zamani ulitumia skripti ya PHP. Ulifanya kazi hadi mtoa huduma mmoja alipobadilisha uwanja (field) mmoja. Timestamp moja iliyokuwa na hitilafu ilisababisha skripti hiyo kuandika safu za data zisizofaa kwenye hifadhidata yetu.
Hatukugundua kwa siku tatu. Mfumo haukufeli. Ulionyesha tu vichwa vya habari visivyo na kitu kwa watumiaji.
Nilibadilisha tabaka la upatikanaji (fetch layer) kwa kutumia Rust SDK. Nilichagua Rust kwa sababu reqwest na serde zinadhibiti mkataba mkali wa data. Ikiwa data ni mbaya, mfumo hukataa waziwazi kwenye mpaka (boundary). Haandiki data mbaya kwenye hifadhidata.
Hivi ndivyo tulivyojenga:
• Define Mkataba wa Data Nilitumia serde kuainisha haswa jinsi video inavyopaswa kuwa. Nilitumia Option kwa uwanja (fields) ambao huenda hayapo. Nilitumia deserializer maalum kwa ajili ya timestamps ili kushughulikia mifumo tofauti ya tarehe. Hii inazuia kosa la "1970-01-01" ambalo ni la kawaida katika mifumo ya zamani.
• Categorize Makosa SDK nzuri inakuambia kwa nini ombi (request) limefeli. Nilitumia thiserror kutengeneza orodha maalum ya makosa. Nilitenganisha makosa ya muda (transient errors) kama vile mipaka ya kasi (rate limits) kutoka kwa makosa makubwa (fatal errors) kama vile ufikiaji usioidhinishwa. Hii inaruhusu mfumo kufanya maamuzi ya kujaribu tena kwa akili badala ya kupoteza rasilimali.
• Manage Miunganisho Nilitumia reqwest::Client kudhibiti mkusanyiko wa miunganisho (connection pool). Hii inazuia mzigo wa kuanzisha TLS handshakes mpya kwa kila ombi.
• Rahisisha Mantiki kwa kutumia Streams Nilitumia async_stream kushughulikia pagination. Mwalio (caller) hahitaji kudhibiti alama za ukurasa (page tokens). Wanapitia tu mtiririko (stream) wa video.
Matokeo yake ni mfumo unaolinda hifadhidata. Tovuti kuu bado inatumia PHP. Hifadhidata bado ni SQLite. Lakini data inayoingia kwenye hifadhidata sasa inahakikishwa kuwa safi.
Huhitaji kuandika upya programu yako nzima ili kupata usalama wa aina (type safety). Unahitaji tu kuhamisha uhakiki (validation) kwenye hatua ambapo data inaingia kwenye mfumo wako.