Construire un SDK d'API vidéo à typage sûr en Rust
La corruption de données est souvent silencieuse.
Au dernier trimestre, mon backend a récupéré des métadonnées vidéo provenant de huit régions. L'ancien système utilisait un script PHP. Il fonctionnait jusqu'à ce qu'un fournisseur modifie un champ. Un seul horodatage malformé a fait que le script a écrit des lignes erronées dans notre base de données.
Nous ne nous en sommes rendu compte que trois jours plus tard. Le système ne s'est pas arrêté. Il affichait simplement des titres vides aux utilisateurs.
J'ai remplacé la couche de récupération par un SDK Rust. J'ai choisi Rust parce que reqwest et serde imposent un contrat de données strict. Si les données sont incorrectes, le système échoue de manière explicite à la frontière. Il n'écrit pas de mauvaises données dans la base de données.
Voici comment nous l'avons construit :
• Définir le contrat de données J'ai utilisé serde pour définir exactement à quoi ressemble une vidéo. J'ai utilisé Option pour les champs qui pourraient être manquants. J'ai utilisé un désérialiseur personnalisé pour les horodatages afin de gérer différents formats de date. Cela évite l'erreur "1970-01-01" courante dans les anciens systèmes.
• Catégoriser les erreurs Un bon SDK vous indique pourquoi une requête a échoué. J'ai utilisé thiserror pour créer une liste d'erreurs spécifique. J'ai séparé les erreurs transitoires, comme les limites de débit, des erreurs fatales, comme l'accès non autorisé. Cela permet au système de décider intelligemment s'il doit réessayer, au lieu de gaspiller des ressources.
• Gérer les connexions J'ai utilisé reqwest::Client pour maintenir un pool de connexions. Cela évite la surcharge liée au démarrage de nouveaux handshakes TLS pour chaque requête.
• Simplifier la logique avec les flux (streams) J'ai utilisé async_stream pour gérer la pagination. L'appelant n'a pas besoin de gérer les jetons de page. Il lui suffit d'itérer à travers un flux de vidéos.
Le résultat est un système qui protège la base de données. Le site web principal fonctionne toujours en PHP. La base de données est toujours SQLite. Mais les données entrant dans la base de données sont désormais garanties propres.
Vous n'avez pas besoin de réécrire toute votre application pour obtenir un typage sûr. Il vous suffit de déplacer la validation au point où les données entrent dans votre système.