Introduction
Les Cloudflare Workers permettent d'exécuter du code JavaScript et WebAssembly à la périphérie du réseau. En 2026, les cas d'usage avancés incluent la gestion d'état avec Durable Objects, le stockage persistant via KV et R2, ainsi que le traitement de files d'attente. Ce tutoriel vous guide pas à pas pour créer une architecture edge robuste et scalable, en partant d'une configuration TypeScript jusqu'au déploiement optimisé.
Prérequis
- Node.js 20+ et Wrangler CLI v3.50+
- Compte Cloudflare avec Workers Pay-as-you-go
- Connaissances solides en TypeScript et HTTP
Initialisation du projet
npm create cloudflare@latest my-worker -- --template=cloudflare/workers-sdk/templates/typescript
cd my-worker
npm installCette commande génère un squelette TypeScript prêt pour Workers. Le template inclut déjà la configuration TypeScript et les types Cloudflare.
Configuration avancée wrangler
name = "my-advanced-worker"
main = "src/index.ts"
compatibility_date = "2025-12-01"
[[kv_namespaces]]
binding = "CACHE"
id = "your_kv_id"
[[durable_objects.bindings]]
name = "SESSION"
class_name = "SessionDO"
[vars]
ENVIRONMENT = "production"Le fichier wrangler.toml déclare les bindings KV et Durable Objects. Le compatibility_date garantit l'accès aux dernières APIs Workers.
Worker principal avec routage
import { SessionDO } from './session';
export interface Env {
CACHE: KVNamespace;
SESSION: DurableObjectNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname.startsWith('/session')) {
const id = env.SESSION.idFromName('global');
const stub = env.SESSION.get(id);
return stub.fetch(request);
}
return new Response('OK', { status: 200 });
}
};Ce worker route les requêtes vers un Durable Object pour la gestion d'état. Le pattern idFromName assure une instance unique globale.
Implémentation Durable Object
import { DurableObject } from 'cloudflare:workers';
export class SessionDO extends DurableObject {
async fetch(request: Request): Promise<Response> {
const session = await this.ctx.storage.get('session') || {};
return Response.json(session);
}
}Le Durable Object conserve l'état via storage. Cette classe est exportée et référencée dans wrangler.toml.
Utilisation de KV et mise en cache
export async function getCachedData(env: Env, key: string) {
const cached = await env.CACHE.get(key, 'json');
if (cached) return cached;
const fresh = await fetchDataFromOrigin();
await env.CACHE.put(key, JSON.stringify(fresh), { expirationTtl: 3600 });
return fresh;
}Ce helper combine lecture KV et fallback avec mise en cache TTL. Évitez les écritures trop fréquentes pour limiter les coûts.
Bonnes pratiques
- Toujours utiliser des bindings déclarés dans wrangler.toml
- Limiter la taille des payloads KV et Durable Objects
- Implémenter une gestion centralisée des erreurs avec try/catch
- Versionner les Workers via des environnements distincts
- Surveiller les métriques avec Workers Analytics
Erreurs courantes à éviter
- Oublier de déclarer les Durable Objects dans wrangler.toml
- Utiliser des variables globales mutables sans ctx.storage
- Ignorer les limites de 100ms CPU sur les requêtes free
- Ne pas gérer les erreurs de KV en mode transactionnel
Pour aller plus loin
Découvrez nos formations Cloudflare avancées pour maîtriser les queues, R2 et l'observabilité.