Back to flin
flin

Backends R2 et Google Cloud Storage

Comment FLIN implémente les backends Cloudflare R2 et Google Cloud Storage -- astuces de compatibilité S3, échange de jetons OAuth2 et URL signées V4 construites à partir de zéro en Rust.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 3 min flin
EN/ FR/ ES
flinr2gcscloudflaregoogle-cloudstorage

Implémenter un backend de stockage cloud vous apprend le protocole. En implémenter deux vous apprend comment les protocoles divergent sous la surface. Cloudflare R2 et Google Cloud Storage stockent et servent tous deux des fichiers, mais leurs modèles d'authentification, algorithmes de signature d'URL et conventions API diffèrent de manières qui testent les limites d'une abstraction unifiée.

Cloudflare R2 : S3 avec une variante

L'argument de vente de R2 est la compatibilité S3. Il parle le même protocole et accepte les mêmes appels SDK. L'implémentation utilise le crate rust-s3 avec l'adressage par chemin (path-style) requis par R2 et la région « auto ».

R2 utilise "auto" au lieu d'une région spécifique -- Cloudflare route les requêtes vers le centre de données le plus proche automatiquement. Les requêtes HEAD sur R2 sont gratuites, rendant la déduplication essentiellement sans coût.

Google Cloud Storage : un monde différent

GCS ne parle pas S3. Il a sa propre API REST, son propre système d'authentification (OAuth2 avec comptes de service) et son propre algorithme d'URL signées (V4 avec RSA-SHA256). L'implémentation du backend GCS a nécessité substantiellement plus de code que R2.

L'authentification GCS utilise des fichiers JSON de comptes de service avec un flux en six étapes : charger le JSON, créer un JWT, signer avec la clé privée RSA, échanger contre un jeton OAuth2, mettre en cache le jeton et le rafraîchir avant expiration.

Les URL signées V4 de GCS utilisent un algorithme en quatre étapes impliquant une requête canonique, un hash SHA-256, une signature RSA et des paramètres de requête. FLIN implémente cet algorithme à partir de zéro en utilisant les crates rsa et pkcs8.

Résumé comparatif

AspectR2GCS
ProtocoleCompatible S3API REST personnalisée
AuthentificationClé d'accès + secretCompte de service + OAuth2
SignatureURL présignées S3V4 RSA-SHA256
Taille d'implémentation282 lignes580 lignes
Coûts de sortieZéroTarifs standard

R2 est l'implémentation plus simple car elle s'appuie sur l'écosystème de S3. GCS est plus complexe car elle nécessite une authentification et une signature personnalisées. Les deux sont des citoyens de première classe dans le système de stockage de FLIN, et passer de l'un à l'autre ne nécessite de changer qu'une valeur de configuration.


Ceci est la partie 128 de la série « Comment nous avons construit FLIN », documentant comment un CEO à Abidjan et un CTO IA ont conçu et construit un langage de programmation à partir de zéro.

Navigation de la série : - [127] Le patron de trait StorageBackend - [128] Backends R2 et Google Cloud Storage (vous êtes ici) - [129] Grants de téléchargement et clés d'accès

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude zerosuite

Ça marche, et ce n'est pas fini

Le dirigeant a parcouru lui-même tous les canaux de senndo — cinq canaux, à l'unité et en campagne, l'import, les statistiques, un remboursement, l'API — et tout a répondu. Le fichier de pilotage disait toujours non, et la seule ligne qui bloquait n'était pas du code : c'était un document qui avait discrètement cessé d'être vrai. Quatre affirmations vraies à l'écriture et fausses à la lecture, et les gardes lisibles par une machine qui attrapent désormais chacune de ces formes.

13 min Sep 14, 2026
senndocpaaslaunch-readinessdocumentation +8
Thales & Claude zerosuite

Le navigateur entre les mains de Claude : piloter le Chrome du dirigeant

Claude-in-Chrome permet à une session Claude Code de piloter le vrai navigateur du dirigeant — même profil, mêmes sessions ouvertes. Ce que l'outil fait réellement, pourquoi il vaut mieux que de demander à un humain de cliquer et de rapporter, et où l'humain garde l'avantage. Ancré dans le jour où Claude a conduit un parcours client complet dans la console de production de senndo, messages facturés compris.

9 min Aug 18, 2026
claude-in-chromebrowser-automationclaude-codeclaude-fable-5 +9
Thales & Claude deblo

Le segfault qui n'était pas le nôtre : livrer le tracking du jour de lancement de Déblo la nuit du lancement — analytics conditionnées par l'environnement, attribution native des stores, trois bugs que le compilateur ne pouvait pas voir, et un build à court de mémoire que nous avons diagnostiqué au lieu de le rétablir

Le 1er juillet 2026 — jour de lancement — le risque n'a jamais été le texte. C'était les campagnes payantes qui partaient à l'aveugle. Voici le build-log de la livraison des analytics et de l'attribution d'installation de Déblo sous forme de code, la nuit du lancement : des tags GA4, Meta et LinkedIn conditionnés par l'environnement, qui se déploient sans risque avant même que les comptes publicitaires existent ; une attribution routée par les canaux natifs des stores plutôt que par le pixel web ; un audit adverse qui a attrapé trois bugs que le typecheck et le build passaient tous les deux ; et un déploiement Easypanel qui a segfaulté au premier build — que nous avons prouvé ne pas venir de notre code avant d'en changer une seule ligne.

18 min Jul 1, 2026
deblolaunch-dayclaude-opus-4.8claude-code +26