Caching API-Antworten in React - Apidog

API-Antworten cachen: Optimiert Leistung & Nutzererlebnis. Erfahre mehr!

Leo Schulz

Leo Schulz

5 June 2025

Caching API-Antworten in React - Apidog

In diesem Artikel werden wir das Konzept des API-Caching untersuchen, die Erstellung einer benutzerdefinierten Caching-Komponente in React besprechen und verschiedene Tools und Pakete untersuchen, die den Prozess vereinfachen. Egal, ob Sie eine einfache Caching-Lösung implementieren oder erweiterte Tools wie React Query und SWR nutzen möchten, dieser Leitfaden bietet die Erkenntnisse und praktischen Schritte, die erforderlich sind, um Ihre React-Anwendungen mit effizientem API-Antwort-Caching zu optimieren.

Warum API-Antworten in React cachen?

Das Caching von API-Antworten ist eine entscheidende Technik in der modernen Webentwicklung, die die Leistung und Effizienz von Anwendungen erheblich verbessern kann. Da Anwendungen immer komplexer werden, sind sie zunehmend auf externe APIs angewiesen, um Daten abzurufen, was ein effizientes Datenmanagement zu einem kritischen Anliegen macht. Eine leistungsstarke Technik zur Optimierung der Leistung und Verbesserung der Benutzererfahrung ist das Caching von API-Antworten. Durch das Speichern von Antworten von API-Aufrufen können Anwendungen die Serverlast erheblich reduzieren, die Datenabrufzeiten minimieren und den Benutzern ein nahtloses Erlebnis bieten.

Stellen Sie sich ein Szenario vor, in dem ein Benutzer eine Seite erneut aufruft, auf die er zuvor zugegriffen hat – anstatt eine neue Anfrage an den Server zu senden und darauf zu warten, dass die Daten erneut abgerufen werden, kann die Anwendung die gespeicherte Antwort fast sofort bereitstellen. Dies spart nicht nur wertvolle Zeit, sondern sorgt auch für eine reibungslosere und reaktionsschnellere Oberfläche.

Erstellen einer benutzerdefinierten Caching-Komponente

Das Erstellen einer benutzerdefinierten Caching-Komponente in React ermöglicht eine präzise Kontrolle darüber, wie Daten gecached und verwaltet werden. Dieser Abschnitt bietet eine Schritt-für-Schritt-Anleitung zum Erstellen einer solchen Komponente sowie eine Diskussion über ihre Nachteile.

Komponenten-Setup

Richten Sie zunächst eine grundlegende React-Komponente ein, die für das Abrufen und Cachen von Daten zuständig ist.


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>
  );
};

Zustandsverwaltung

Der useState-Hook wird verwendet, um sowohl die gecachten Daten als auch die aktuell abgerufenen Daten zu verwalten. Dadurch kann die Komponente bestimmen, ob gecachte Daten bereitgestellt oder ein neuer API-Aufruf durchgeführt werden soll.

Daten abrufen und cachen

Der useEffect-Hook enthält die Logik, um den Cache zu überprüfen, bevor eine Netzwerkanfrage gestellt wird. Wenn die Daten im Cache gefunden werden, werden sie direkt verwendet; andernfalls wird eine Fetch-Anfrage gestellt und das Ergebnis im Cache gespeichert.

Datenablauf

Um die Cache-Ungültigkeit zu handhaben, können Sie eine Time-to-Live (TTL) für gecachte Daten festlegen. Dies stellt sicher, dass die Daten regelmäßig aktualisiert werden und auf dem neuesten Stand bleiben.

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>
  );
};

Nachteile des benutzerdefinierten Caching

Während das Erstellen einer benutzerdefinierten Caching-Komponente Flexibilität bietet, birgt es auch mehrere Nachteile:

Durch das Verständnis dieser Herausforderungen können Entwickler fundierte Entscheidungen darüber treffen, wann benutzerdefiniertes Caching implementiert und wann erweiterte Tools genutzt werden sollen

Verwenden von NPM-Paketen für das Caching

Die Nutzung von NPM-Paketen kann die Implementierung von Caching in React-Anwendungen erheblich vereinfachen. Hier sind ein paar beliebte Pakete, die Ihnen den Einstieg erleichtern können:

axios-cache-adapter

axios-cache-adapter integriert Caching-Funktionen in axios, einen beliebten HTTP-Client.

Installation:

npm install axios axios-cache-adapter

Verwendung:

// 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 implementiert einen Least-Recently-Used (LRU)-Cache.

Installation:

npm install lru-cache

Verwendung:

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 vereinfacht das Speichern von Schlüssel-Wert-Paaren in IndexedDB, einer Low-Level-API für die clientseitige Speicherung.

Installation:

npm install idb-keyval

Verwendung:

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;
};

Diese Pakete bieten eine einfache Möglichkeit, Caching in Ihren React-Anwendungen zu implementieren, wodurch die Komplexität und der Aufwand für die manuelle Verwaltung gecachter Daten reduziert werden. Durch die Verwendung dieser Tools können Sie sich mehr auf die Entwicklung der Funktionen Ihrer Anwendung konzentrieren und gleichzeitig einen effizienten Datenabruf und eine verbesserte Leistung sicherstellen.

Einführung in erweiterte Tools für API-Caching

Wenn es um das Caching von API-Antworten in React geht, bieten erweiterte Tools wie React Query und SWR robuste, funktionsreiche Lösungen, die die Fähigkeiten von selbst erstellten Caching-Mechanismen übertreffen. Diese Tools wurden entwickelt, um die Zustandsverwaltung zu vereinfachen, das Datenabrufen zu verbessern und die Datenkonsistenz sicherzustellen, und das alles bei gleichzeitig nahtloser Entwicklererfahrung.

TanStack Query

TanStack Query (FKA React Query ist eine leistungsstarke Datenabrufbibliothek für React-Anwendungen, die die Komplexität der Verwaltung serverseitiger Daten abstrahiert. React Query verändert die Art und Weise, wie Sie den Serverzustand in Ihren React-Anwendungen handhaben. Es bietet integriertes Caching, Hintergrundaktualisierungen und sofortige Unterstützung für die Fehlerbehandlung, wodurch es einfacher wird, die Datenabruflogik zu verwalten, ohne das Caching und die Zustandssynchronisierung manuell handhaben zu müssen.

Vorteile gegenüber benutzerdefinierten Lösungen:

Vereinfachte Zustandsverwaltung:
React Query kümmert sich um die Feinheiten des Caching und der Zustandsverwaltung, sodass sich Entwickler auf die Anwendungslogik konzentrieren können. Es abstrahiert die Komplexität des Caching, der Ungültigkeit und des erneuten Abrufens von Daten und bietet eine saubere und intuitive API.

Automatische Hintergrundaktualisierung:
React Query kann Daten automatisch im Hintergrund erneut abrufen, um sie auf dem neuesten Stand zu halten. Dies stellt sicher, dass Ihre Anwendung immer die aktuellsten Daten anzeigt, ohne dass manuelle Auslöser für die Aktualisierung erforderlich sind.

Optimistische Aktualisierungen:
Mit optimistischen Aktualisierungen kann React Query Änderungen in der Benutzeroberfläche sofort widerspiegeln, bevor der Server die Aktualisierung bestätigt. Dies bietet eine reibungslose und reaktionsschnelle Benutzererfahrung, da Benutzer ihre Aktionen sofort widergespiegelt sehen können.

Beispiel:

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>
  )
}

Der obige Code stammt von der offiziellen Dokumentationsseite und erklärt die grundlegende Art und Weise, Daten abzurufen. Wie Sie aus den obigen Codes sehen können, erleichtert uns TanStack Query das Abrufen von Daten und auch das einfache Cachen dieser Daten.

SWR (Stale-While-Revalidate)

SWR, entwickelt von Vercel, ist eine weitere beliebte Datenabrufbibliothek für React, die Einfachheit und Effizienz in den Vordergrund stellt. Der Name "SWR" steht für "Stale-While-Revalidate", eine Caching-Strategie, die veraltete Daten bereitstellt, während frische Daten im Hintergrund abgerufen werden.

SWR bietet eine sehr intuitive API für das Abrufen und Cachen von Daten. Es stellt sicher, dass Ihre Anwendung Daten sofort anzeigt (veraltete Daten) und dann durch das Abrufen frischer Daten im Hintergrund erneut validiert. Diese Strategie bietet ein Gleichgewicht zwischen Leistung und Datenaktualität.

Vorteile gegenüber benutzerdefinierten Lösungen:

Benutzerfreundlichkeit:
Die API von SWR ist einfach und leicht zu bedienen, wodurch sie für Entwickler aller Fähigkeitsstufen zugänglich ist. Es verarbeitet das Abrufen, Cachen, Synchronisieren und die Fehlerbehandlung von Daten mit minimaler Konfiguration.

Datenkonsistenz:
SWR stellt sicher, dass Ihre Anwendungsdaten immer aktuell sind. Es validiert Daten automatisch im Hintergrund erneut, wodurch Benutzern die aktuellsten Informationen bereitgestellt werden, ohne dass manuelle Aktualisierungen erforderlich sind.

Fehlerbehandlung:
Die integrierte Fehlerbehandlung in SWR erleichtert die Verwaltung von Fehlern beim Datenabruf. Es bietet Hooks, um Fehlermeldungen oder Fallback-UI-Komponenten anzuzeigen, wenn der Datenabruf fehlschlägt.

Beispiel:

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>
  );
};

Sowohl React Query als auch SWR bieten umfassende Lösungen für die Verwaltung serverseitiger Daten in React-Anwendungen. Sie vereinfachen den Prozess des Abrufens, Caching und Synchronisierens von Daten und bieten leistungsstarke Funktionen, die den Bedarf an benutzerdefinierter Caching-Logik reduzieren. Durch die Nutzung dieser Tools können Entwickler sicherstellen, dass ihre Anwendungen effizient und leistungsfähig sind und eine nahtlose Benutzererfahrung bieten.

Arbeiten mit Apidog

Apidog's home page

Apidog verbessert die API-Sicherheit, indem es robuste Dokumentation, automatisierte Tests und Echtzeitüberwachung bietet. Apidog unterstützt auch die Einhaltung von Industriestandards wie GDPR und HIPAA und stellt sicher, dass Ihre APIs Benutzerdaten effektiv schützen.

Darüber hinaus unterstützt Apidog die Teamzusammenarbeit und fördert eine sicherheitsorientierte Entwicklungsumgebung. Durch die Integration von Apidog können Sie sichere, zuverlässige und konforme APIs erstellen und Ihre Daten und Benutzer vor verschiedenen Sicherheitsbedrohungen schützen.

button

Fazit

Die Optimierung der API-Antwortzeiten ist entscheidend für die Verbesserung der Leistung und der Benutzererfahrung moderner Webanwendungen. Das Caching von API-Antworten kann die Serverlast erheblich reduzieren und die Datenabrufgeschwindigkeit verbessern. Während das Erstellen benutzerdefinierter Caching-Komponenten in React Flexibilität bietet, kann die Nutzung erweiterter Tools wie React Query und SWR den Prozess rationalisieren und zusätzliche Funktionen wie automatische Hintergrundaktualisierungen und Fehlerbehandlung bereitstellen.

Darüber hinaus kann die Verwendung von NPM-Paketen wie axios-cache-adapter, lru-cache und idb-keyval die Caching-Implementierungen vereinfachen und die Komplexität der Verwaltung gecachter Daten reduzieren. Für ein umfassendes API-Management bieten Tools wie Apidog robuste Lösungen für API-Design, -Tests und -Überwachung, die Zuverlässigkeit und Effizienz während des gesamten Entwicklungszyklus gewährleisten.

Durch die Einbeziehung dieser Tools und Strategien können Entwickler reaktionsschnelle und leistungsstarke Anwendungen erstellen, die eine nahtlose Benutzererfahrung bieten.

Explore more

So verwenden Sie Deepseek R1 lokal mit Cursor

So verwenden Sie Deepseek R1 lokal mit Cursor

Erfahre, wie du DeepSeek R1 lokal mit Cursor IDE einrichtest & konfigurierst – privates, kostengünstiges KI-Coding.

4 June 2025

Wie man Gemma 3n auf Android ausführt?

Wie man Gemma 3n auf Android ausführt?

Erfahre, wie du Gemma 3n auf Android installierst und ausführst, mit Google AI Edge Gallery.

3 June 2025

So verwenden Sie den Google Search Console MCP-Server

So verwenden Sie den Google Search Console MCP-Server

Google Search Console & Apidog: SEO-Analyse & KI-API-Entwicklung. Installation, Konfiguration & Nutzung für Web-Performance & API-Einblicke.

30 May 2025

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen