Dans cet article, nous allons explorer le concept de la mise en cache des API, discuter de la création d'un composant de mise en cache personnalisé dans React, et examiner divers outils et packages qui simplifient le processus. Que vous cherchiez à implémenter une solution de mise en cache de base ou à tirer parti d'outils avancés comme React Query et SWR, ce guide vous fournira les informations et les étapes pratiques nécessaires pour optimiser vos applications React avec une mise en cache efficace des réponses d'API.
Pourquoi mettre en cache les réponses d'API dans React ?
La mise en cache des réponses d'API est une technique essentielle dans le développement web moderne qui peut améliorer considérablement les performances et l'efficacité des applications. À mesure que les applications deviennent plus complexes, elles s'appuient de plus en plus sur des API externes pour récupérer des données, ce qui fait de la gestion efficace des données une préoccupation essentielle. Une technique puissante pour optimiser les performances et améliorer l'expérience utilisateur est la mise en cache des réponses d'API. En stockant les réponses des appels d'API, les applications peuvent réduire considérablement la charge du serveur, minimiser les temps de récupération des données et offrir une expérience transparente aux utilisateurs.
Imaginez un scénario où un utilisateur revisite une page à laquelle il a déjà accédé : au lieu de faire une nouvelle requête au serveur et d'attendre que les données soient récupérées à nouveau, l'application peut servir la réponse stockée presque instantanément. Cela permet non seulement de gagner un temps précieux, mais aussi d'assurer une interface plus fluide et plus réactive.
Création d'un composant de mise en cache personnalisé
La création d'un composant de mise en cache personnalisé dans React permet un contrôle précis sur la façon dont les données sont mises en cache et gérées. Cette section fournit un guide étape par étape pour la construction d'un tel composant, ainsi qu'une discussion sur ses inconvénients.
Configuration du composant
Tout d'abord, configurez un composant React de base qui sera responsable de la récupération et de la mise en cache des données.
import React, { useState, useEffect } from 'react';
const useCustomCache = (apiUrl) => {
const [data, setData] = useState(null);
const [cache, setCache] = useState({});
useEffect(() => {
if (cache[apiUrl]) {
setData(cache[apiUrl]);
} else {
fetch(apiUrl)
.then(response => response.json())
.then(result => {
setCache(prevCache => ({ ...prevCache, [apiUrl]: result }));
setData(result);
});
}
}, [apiUrl, cache]);
return data;
};
export function App(props) {
const apiUrl = 'https://jsonplaceholder.typicode.com/users';
const data = useCustomCache(apiUrl);
if (!data) return <div>Loading...</div>;
return (
<div className='App'>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
};
Gestion de l'état
Le hook useState est utilisé pour gérer à la fois les données mises en cache et les données en cours de récupération. Cela permet au composant de déterminer s'il faut servir des données mises en cache ou effectuer un nouvel appel d'API.
Récupération et mise en cache des données
Le hook useEffect contient la logique pour vérifier le cache avant de faire une requête réseau. Si les données sont trouvées dans le cache, elles sont utilisées directement ; sinon, une requête fetch est effectuée et le résultat est stocké dans le cache.
Expiration des données
Pour gérer l'invalidation du cache, vous pouvez définir une durée de vie (TTL) pour les données mises en cache. Cela garantit que les données sont périodiquement actualisées et restent à jour.
import React, { useState, useEffect } from 'react';
const useCustomCache = (apiUrl, ttl = 60000) => {
const [data, setData] = useState(null);
const [cache, setCache] = useState({});
useEffect(() => {
const cachedData = cache[apiUrl];
if (cachedData && (Date.now() - cachedData.timestamp < ttl)) {
setData(cachedData.data);
} else {
fetch(apiUrl)
.then(response => response.json())
.then(result => {
setCache(prevCache => ({ ...prevCache, [apiUrl]: { data: result, timestamp: Date.now() } }));
setData(result);
});
}
}, [apiUrl, cache, ttl]);
return data;
};
export function App(props) {
const apiUrl = 'https://jsonplaceholder.typicode.com/users';
const data = useCustomCache(apiUrl);
if (!data) return <div>Loading...</div>;
return (
<div className='App'>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
};
Inconvénients de la mise en cache personnalisée
Bien que la création d'un composant de mise en cache personnalisé offre une flexibilité, elle présente également plusieurs inconvénients :
- Complexité : la logique de mise en cache personnalisée peut ajouter une complexité importante à la base de code, ce qui la rend plus difficile à maintenir et à déboguer.
- Maintenance : des mises à jour et une maintenance régulières sont nécessaires pour garantir que la logique de mise en cache continue de fonctionner correctement à mesure que l'application évolue.
- Problèmes d'évolutivité : à mesure que l'application se développe, la gestion des solutions de mise en cache personnalisées peut devenir de plus en plus difficile, ce qui peut entraîner des goulets d'étranglement en termes de performances.
En comprenant ces défis, les développeurs peuvent prendre des décisions éclairées quant au moment d'implémenter une mise en cache personnalisée et au moment de tirer parti d'outils plus avancés
Utilisation de packages NPM pour la mise en cache
Tirer parti des packages NPM peut grandement simplifier l'implémentation de la mise en cache dans les applications React. Voici quelques packages populaires qui peuvent vous aider à démarrer :
axios-cache-adapter
axios-cache-adapter
intègre des capacités de mise en cache dans axios, un client HTTP populaire.
Installation :
npm install axios axios-cache-adapter
Utilisation :
// Import dependencies
import axios from 'axios'
import { setupCache } from 'axios-cache-adapter'
// Create `axios-cache-adapter` instance
const cache = setupCache({
maxAge: 15 * 60 * 1000
})
// Create `axios` instance passing the newly created `cache.adapter`
const api = axios.create({
adapter: cache.adapter
})
// Send a GET request to some REST api
api({
url: 'http://some-rest.api/url',
method: 'get'
}).then(async (response) => {
// Do something fantastic with response.data \o/
console.log('Request response:', response)
// Interacting with the store, see `localForage` API.
const length = await cache.store.length()
console.log('Cache store length:', length)
})
lru-cache
lru-cache
implémente un cache de type "least-recently-used" (LRU).
Installation :
npm install lru-cache
Utilisation :
import LRU from 'lru-cache';
const cache = new LRU({ max: 100 }); // Maximum number of items in cache
const fetchData = async (url) => {
if (cache.has(url)) {
return cache.get(url);
}
const response = await fetch(url);
const data = await response.json();
cache.set(url, data);
return data;
};
idb-keyval
idb-keyval
simplifie le stockage de paires clé-valeur dans IndexedDB, une API de bas niveau pour le stockage côté client.
Installation :
npm install idb-keyval
Utilisation :
import { get, set } from 'idb-keyval';
const fetchData = async (url) => {
const cachedData = await get(url);
if (cachedData) {
return cachedData;
}
const response = await fetch(url);
const data = await response.json();
await set(url, data);
return data;
};
Ces packages offrent un moyen simple d'implémenter la mise en cache dans vos applications React, réduisant la complexité et l'effort requis pour gérer manuellement les données mises en cache. En utilisant ces outils, vous pouvez vous concentrer davantage sur le développement des fonctionnalités de votre application tout en assurant une récupération efficace des données et une amélioration des performances.
Introduction aux outils avancés pour la mise en cache des API
En ce qui concerne la mise en cache des réponses d'API dans React, des outils avancés comme React Query et SWR offrent des solutions robustes et riches en fonctionnalités qui surpassent les capacités des mécanismes de mise en cache personnalisés. Ces outils sont conçus pour simplifier la gestion de l'état, améliorer la récupération des données et assurer la cohérence des données, tout en offrant une expérience de développement transparente.
TanStack Query
TanStack Query (FKA React Query est une bibliothèque de récupération de données puissante pour les applications React qui abstrait les complexités de la gestion des données côté serveur. React Query transforme la façon dont vous gérez l'état du serveur dans vos applications React. Il offre une mise en cache intégrée, des mises à jour en arrière-plan et une prise en charge prête à l'emploi de la gestion des erreurs, ce qui facilite la gestion de la logique de récupération des données sans avoir besoin de gérer manuellement la mise en cache et la synchronisation de l'état.
Avantages par rapport aux solutions personnalisées :
Gestion simplifiée de l'état :
React Query gère les subtilités de la mise en cache et de la gestion de l'état, permettant aux développeurs de se concentrer sur la logique de l'application. Il abstrait les complexités de la mise en cache, de l'invalidation et de la récupération des données, en fournissant une API claire et intuitive.
Actualisation automatique en arrière-plan :
React Query peut automatiquement récupérer les données en arrière-plan pour les maintenir à jour. Cela garantit que votre application affiche toujours les données les plus récentes sans avoir besoin de déclencheurs d'actualisation manuels.
Mises à jour optimistes :
Avec les mises à jour optimistes, React Query peut refléter immédiatement les modifications dans l'interface utilisateur avant que le serveur ne confirme la mise à jour. Cela offre une expérience utilisateur fluide et réactive, car les utilisateurs peuvent voir leurs actions se refléter instantanément.
Exemple :
npm install react-query // install the package
import { QueryClient, QueryClientProvider, useQuery } from 'react-query'
const queryClient = new QueryClient()
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<Example />
</QueryClientProvider>
)
}
function Example() {
const { isPending, error, data } = useQuery({
queryKey: ['repoData'],
queryFn: () =>
fetch('https://jsonplaceholder.typicode.com/users').then((res) =>
res.json(),
),
})
console.log(data)
if (isPending) return 'Loading...'
if (error) return 'An error has occurred: ' + error.message
return (
<div>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
)
}
Le code ci-dessus provient de la page de documentation officielle, et il explique la façon de base de récupérer des données. Comme vous pouvez le constater à partir des codes ci-dessus, TanStack Query nous facilite la récupération des données, et également la mise en cache de ces données facilement.
SWR (Stale-While-Revalidate)
SWR, développé par Vercel, est une autre bibliothèque de récupération de données populaire pour React qui met l'accent sur la simplicité et l'efficacité. Le nom "SWR" signifie "stale-while-revalidate", une stratégie de mise en cache qui sert des données périmées tout en récupérant de nouvelles données en arrière-plan.
SWR fournit une API très intuitive pour la récupération et la mise en cache des données. Il garantit que votre application affiche les données immédiatement (données périmées), puis les revalide en récupérant de nouvelles données en arrière-plan. Cette stratégie offre un équilibre entre les performances et la fraîcheur des données.
Avantages par rapport aux solutions personnalisées :
Facilité d'utilisation :
L'API de SWR est simple et facile à utiliser, ce qui la rend accessible aux développeurs de tous niveaux. Il gère la récupération des données, la mise en cache, la synchronisation et la gestion des erreurs avec une configuration minimale.
Cohérence des données :
SWR garantit que les données de votre application sont toujours fraîches. Il revalide automatiquement les données en arrière-plan, fournissant aux utilisateurs les informations les plus récentes sans nécessiter d'actualisations manuelles.
Gestion des erreurs :
La gestion des erreurs intégrée dans SWR facilite la gestion des erreurs lors de la récupération des données. Il fournit des hooks pour afficher des messages d'erreur ou des composants d'interface utilisateur de secours en cas d'échec de la récupération des données.
Exemple :
npm install swr // install the package
import useSWR from 'swr';
const fetcher = (url) => fetch(url).then((res) => res.json());
export default Example = () => {
const apiUrl = 'https://jsonplaceholder.typicode.com/users';
const { data, error } = useSWR(apiUrl, fetcher);
if (!data) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;
return (
<div>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
};
React Query et SWR fournissent tous deux des solutions complètes pour la gestion des données côté serveur dans les applications React. Ils simplifient le processus de récupération, de mise en cache et de synchronisation des données, offrant des fonctionnalités puissantes qui réduisent le besoin de logique de mise en cache personnalisée. En tirant parti de ces outils, les développeurs peuvent s'assurer que leurs applications sont efficaces, performantes et offrent une expérience utilisateur transparente.
Travailler avec Apidog

Apidog améliore la sécurité des API en offrant une documentation robuste, des tests automatisés et une surveillance en temps réel. Apidog aide également au respect des normes de l'industrie comme le RGPD et la HIPAA, garantissant que vos API protègent efficacement les données des utilisateurs.
De plus, Apidog prend en charge la collaboration d'équipe, favorisant un environnement de développement axé sur la sécurité. En intégrant Apidog, vous pouvez créer des API sécurisées, fiables et conformes, protégeant vos données et vos utilisateurs contre diverses menaces de sécurité.
Conclusion
L'optimisation des temps de réponse des API est cruciale pour améliorer les performances et l'expérience utilisateur des applications web modernes. La mise en cache des réponses d'API peut réduire considérablement la charge du serveur et améliorer la vitesse de récupération des données. Bien que la création de composants de mise en cache personnalisés dans React offre une flexibilité, l'utilisation d'outils avancés comme React Query et SWR peut rationaliser le processus et fournir des fonctionnalités supplémentaires telles que les mises à jour automatiques en arrière-plan et la gestion des erreurs.
De plus, l'utilisation de packages NPM tels que axios-cache-adapter
, lru-cache
et idb-keyval
peut simplifier les implémentations de mise en cache et réduire la complexité de la gestion des données mises en cache. Pour une gestion complète des API, des outils comme Apidog offrent des solutions robustes pour la conception, les tests et la surveillance des API, garantissant la fiabilité et l'efficacité tout au long du cycle de vie du développement.
En intégrant ces outils et stratégies, les développeurs peuvent créer des applications réactives et performantes qui offrent une expérience utilisateur transparente.