🔥 Firehook

Blog · api rest

Cache et ETags pour API REST

Reduire la latence et la charge serveur avec le cache HTTP, les ETags et Cache-Control.

Passerelle API avec couches lumineuses, symbolisant le cache et les ETags

Pourquoi le cache compte

Le cache est l'un des leviers les plus rentables pour les APIs en lecture. Il reduit la latence et economise des ressources.

HTTP fournit des mecanismes natifs. Bien utilises, ils donnent des gains gratuits via navigateurs et CDN.

Les bases de Cache-Control

Cache-Control indique qui peut stocker la reponse et combien de temps. `public` autorise les caches partages, `private` limite au client, `max-age` fixe la fraicheur.

Adaptez par endpoint. Toutes les donnees ne se cachent pas de la meme facon.

ETags et requetes conditionnelles

Les ETags permettent de verifier si une ressource a change sans la retelecharger. Le client envoie If-None-Match et le serveur renvoie 304 si rien n'a bouge.

C'est ideal pour des ressources volumineuses ou peu changeantes.

Headers Last-Modified

Last-Modified est plus simple a produire qu'un ETag. Il suffit d'un timestamp fiable.

Moins precis, mais souvent suffisant.

Cache et authentification

Les reponses authentifiees peuvent etre cachees avec `private`. Evitez les caches partages.

Ajoutez `Vary` si la reponse depend de l'auth ou de la langue.

Invalidation

Le cache n'est utile que si l'invalidation est correcte. TTL courts pour le dynamique, longs pour le stable.

Quand les donnees changent, mettez a jour les ETags ou purgez les caches.

Recette pratique

Endpoints lecture : Cache-Control + ETag + 304. Endpoints sensibles : private + TTL court.

Mesurez les hit rates et ajustez. Le cache est un outil de tuning.

FAQ

Qu'est-ce qu'un ETag ?
Un ETag est un identifiant de version d'une representation. Il permet de verifier si la ressource a change.
ETag fort ou faible ?
Un ETag fort garantit l'identite byte a byte, un ETag faible est plus simple mais moins strict.
Peut-on mettre en cache des reponses authentifiees ?
Oui avec `private` et des headers clairs. Evitez les caches partages pour des donnees sensibles.
Quand renvoyer 304 Not Modified ?
Quand le client envoie If-None-Match ou If-Modified-Since et que la ressource n'a pas change.
Le cache concerne-t-il uniquement GET ?
En pratique oui. Les reponses GET sont cacheables, les ecritures non.