Cache client
ts
import { createHttpClient } from "@duplojs/http/client";
import { E, unwrap } from "@duplojs/utils";
import { type Routes } from "./types";
const client = createHttpClient<Routes>({
baseUrl: "http://localhost:1506",
});
const firstUsersRequest = await client.get(
"/users",
{ clientCache: "auto" },
);
const secondUsersRequest = await client.get(
"/users",
{ clientCache: "auto" },
);
if (E.isRight(secondUsersRequest) && unwrap(secondUsersRequest).fromCache) {
console.log("Response loaded from cache.");
}
const refreshedUsersRequest = await client.get(
"/users",
{
clientCache: "auto",
refreshClientCache: true,
},
);
const bypassedUsersRequest = await client.get(
"/users",
{
clientCache: "auto",
bypassClientCache: true,
},
);
const customKeyRequest = await client.get(
"/users/{userId}",
{
params: { userId: "42" },
clientCache(params) {
return `user:${params.path}:${params.params?.userId?.toString()}`;
},
},
);Le client HTTP peut mettre en cache les réponses côté client. Pour activer ce comportement sur une requête, il faut utiliser la prop clientCache.
Avec la valeur "auto", DuploJS construit une clé de cache à partir de :
- la méthode HTTP
- le path final avec les params injectés
- la query triée par clé
- le body
Vous pouvez aussi passer une fonction pour construire votre propre clé de cache.
Seules les réponses 2xx sont enregistrées dans le cache. Lorsqu'une réponse vient du cache, la propriété fromCache est définie à true.
Deux options permettent de contrôler ce comportement :
bypassClientCache: trueignore complètement le cache pour la requête courante : aucune lecture et aucune écriture.refreshClientCache: trueignore uniquement la lecture du cache, refait la requête réseau, puis remplace la valeur en cache si la réponse est un succès.
INFO
Le cache client est local à l'instance de createHttpClient. Deux clients différents ne partagent pas le même cache.
