Skip to content

Type de ressource : Cloudflare Worker (Microservice FaaS / Middleware)
Fichier source : services/[worker-name]/src/index.ts
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0


[Description concise du rîle de ce Worker dans l’architecture L3]

  • [Objectif principal : ex. intercepter toutes les requĂȘtes HTTP pour appliquer les politiques de sĂ©curitĂ©]
  • [BĂ©nĂ©fice pour l’architecture : ex. dĂ©couplage de la logique Edge du framework Astro]
Propriété Valeur
Type [Middleware HTTP / Microservice métier / Cron Trigger / Pages Function]
Trigger [HTTP fetch / Cron / Queue consumer / Les deux]
Route publique https://[worker-name].[subdomain].workers.dev ou sous-domaine dédié
Environnements [Production / Staging / Preview]
Consommateurs [Astro / Sanity / Navigateur / Autres Workers]

[Entrée : Client / Astro / Sanity / Cron]
│
▌
[Cloudflare Worker]
│ ‱ Validation des entrĂ©es
│ ‱ Logique mĂ©tier
│ ‱ Interaction avec les bindings (KV, R2, Queue)
▌
[Services tiers / Storage]
│ ‱ Sanity API / CRM / R2 / KV
▌
[Réponse / Action]
Composant RĂŽle Type
[Nom] [Description] [Binding / Service tiers / Client]

Variable Description Obligatoire Valeur par défaut
[Variable] [Description] [✅/❌] [Valeur]
Binding Type Nom Description
[Nom] [KV / R2 / Queue / Service / Secret] [Binding name] [Description]
services/[worker-name]/wrangler.toml
name = "[worker-name]"
main = "src/index.ts"
compatibility_date = "2026-09-01"
[vars]
# Variables non-sensibles
[VAR_NAME] = "value"
# Bindings
[[kv_namespaces]]
binding = "KV_BINDING"
id = "your-kv-namespace-id"
[[r2_buckets]]
binding = "R2_BUCKET"
bucket_name = "bucket-name"
[[queues.producers]]
queue = "queue-name"
binding = "QUEUE_BINDING"
[triggers]
crons = ["0 * * * *"] # Toutes les heures

services/[worker-name]/src/index.ts
export interface Env {
KV_BINDING: KVNamespace;
R2_BUCKET: R2Bucket;
QUEUE_BINDING: Queue;
[SECRET_NAME]: string;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// Logique métier
if (url.pathname === '/api/endpoint') {
return handleEndpoint(request, env);
}
return new Response('Not Found', { status: 404 });
},
};
export default {
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void> {
// Logique cron
console.log('Cron triggered', { cron: event.cron });
},
};
export default {
async queue(batch: MessageBatch<unknown>, env: Env): Promise<void> {
for (const message of batch.messages) {
await processMessage(message, env);
message.ack();
}
},
};

ParamĂštre Type Source Validation
body object Request body Validation Zod
headers Headers Request headers Validation des en-tĂȘtes
Code HTTP Condition Description
200 SuccÚs Opération réussie
400 Erreur client RequĂȘte invalide
500 Erreur serveur Erreur interne
Effet Description Fréquence
[Écriture KV] [Description] [À chaque appel / Conditionnel]

Scénario Description Résultat attendu
Handler fetch RequĂȘte HTTP valide RĂ©ponse 200
Validation des entrées Données invalides Erreur 400
Scénario Dépendances Description Résultat attendu
Flux complet Bindings + Services tiers Opération end-to-end SuccÚs
Scénario Parcours utilisateur Description Résultat attendu
DĂ©ploiement Build → Deploy DĂ©ploiement sur Cloudflare Worker fonctionnel

Composant Type RĂŽle MĂ©thode d’intĂ©gration
Astro L2 Consommateur HTTP fetch
Sanity L1 Producteur Webhook
Autres Workers L3 Communication Service binding
  • Les bindings doivent ĂȘtre configurĂ©s dans wrangler.toml
  • Les secrets doivent ĂȘtre injectĂ©s via wrangler secret put
  • Les handlers doivent ĂȘtre correctement exportĂ©s
  • Le Worker se dĂ©ploie correctement
  • Les bindings sont accessibles
  • Les tests unitaires passent
  • Les tests E2E passent

  • ✅ Validation des entrĂ©es
  • ✅ Secrets injectĂ©s via wrangler secret put
  • ✅ HTTPS forcĂ©
  • ✅ Ne jamais logger les secrets
  • ✅ Valider toutes les entrĂ©es
  • ✅ Utiliser les permissions minimales

Limite Valeur StratĂ©gie d’optimisation
CPU time 10 ms (free) / 50 ms (paid) Optimiser le code
Memory 128 MB Éviter les gros objets
Requests 100 000 (free) / 10M (paid) Cache Edge
  • ✅ Utiliser le cache Edge
  • ✅ Minimiser les allocations mĂ©moire
  • ✅ Utiliser des opĂ©rations asynchrones

SymptĂŽme Cause probable Solution
Worker échoue Binding manquant Vérifier wrangler.toml
Secret inaccessible Secret non injecté wrangler secret put
Timeout CPU time dépassé Optimiser le code
Terminal window
# Déploiement local
wrangler dev
# Déploiement production
wrangler deploy --env production
# Logs en temps réel
wrangler tail

  • ✅ Handlers sĂ©parĂ©s par type (fetch, cron, queue)
  • ✅ Validation des entrĂ©es
  • ✅ Gestion des erreurs
  • ✅ TypeScript strict
  • ✅ Logs structurĂ©s
  • ✅ Documentation des fonctions
  • ✅ Mettre Ă  jour les dĂ©pendances rĂ©guliĂšrement
  • ✅ Documenter les changements dans ce fichier

  • [Évolution 1]
  • [Évolution 2]
  • ❌ [Limitation 1]
  • ❌ [Limitation 2]

  • Documentation Cloudflare : Workers
  • DAT L3 : §5 - Workers Cloudflare

Date Version Description Auteur
YYYY-MM-DD 1.0 Création initiale [Nom]
Edit page

Last updated: