Mise en cache des réponses d'API dans React - Apidog

Le caching des réponses API optimise la performance et l'expérience utilisateur. Apprenons-en plus !

Louis Dupont

Louis Dupont

5 June 2025

Mise en cache des réponses d'API dans React - Apidog

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 :

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's home page

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é.

button

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.

Explore more

Comment utiliser Deepseek R1 en local avec Cursor

Comment utiliser Deepseek R1 en local avec Cursor

Apprenez à configurer DeepSeek R1 local avec Cursor IDE pour une aide au codage IA privée et économique.

4 June 2025

Comment exécuter Gemma 3n sur Android ?

Comment exécuter Gemma 3n sur Android ?

Apprenez à installer et exécuter Gemma 3n sur Android via Google AI Edge Gallery.

3 June 2025

Comment utiliser Claude Code avec GitHub Actions

Comment utiliser Claude Code avec GitHub Actions

Découvrez Claude Code avec GitHub Actions : revues de code, corrections de bugs, implémentation de fonctionnalités. Tutoriel pour développeurs.

29 May 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API