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 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
Thales & Claude thales

Treize agents, quarante-trois minutes : la première session Workflow de Claude Fable 5, et ce qu'un script d'orchestration déterministe change aux builds multi-agents

Un prompt, treize agents, quarante-trois minutes : la première session de production avec Claude Fable 5 et l'outil Workflow de Claude Code a livré un site web de production complet de sept pages plus un endpoint backend de capture de leads, en un seul commit. Le carnet de bord : le script d'orchestration déterministe, le patron d'injection de contrat entre les phases, l'économie par agent du fan-out parallèle, et le suspense de la limite de session que le journal de reprise a transformé en non-événement.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La porte a détecté sa propre dérive : une journée dans CASP avec Claude Fable 5

Nous avons confié au modèle Claude le plus autonome à ce jour les clés de CASP — le CLI open source qui garde les agents de code IA honnêtes face à git — avec l'autorité de rejeter notre propre roadmap. Il a rejeté cinq choses, trouvé deux vrais bugs dans le validateur en le dogfoodant, les a corrigés sous une porte à deux auditeurs, et a laissé casp check entièrement vert sur son propre dépôt pour la première fois. CASP 0.3.0 en est le résultat.

16 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9