Bu makalede, API önbelleğe alma kavramını inceleyeceğiz, React'te özel bir önbelleğe alma bileşeni oluşturmayı tartışacak ve süreci basitleştiren çeşitli araçları ve paketleri inceleyeceğiz. İster temel bir önbelleğe alma çözümü uygulamak, ister React Query ve SWR gibi gelişmiş araçlardan yararlanmak istiyor olun, bu kılavuz, React uygulamalarınızı verimli API yanıt önbelleğe alma ile optimize etmek için gereken içgörüleri ve pratik adımları sağlayacaktır.
Neden React'te API Yanıtını Önbelleğe Almalısınız?
API yanıt önbelleğe alma, modern web geliştirmede uygulamaların performansını ve verimliliğini önemli ölçüde artırabilen kritik bir tekniktir. Uygulamalar daha karmaşık hale geldikçe, veri almak için giderek daha fazla harici API'lere güveniyor ve bu da verimli veri yönetimini kritik bir endişe haline getiriyor. Performansı optimize etmek ve kullanıcı deneyimini geliştirmek için güçlü bir teknik, API yanıt önbelleğe almadır. API çağrılarından gelen yanıtları depolayarak, uygulamalar sunucu yükünü önemli ölçüde azaltabilir, veri alma sürelerini en aza indirebilir ve kullanıcılara sorunsuz bir deneyim sunabilir.
Bir kullanıcının daha önce eriştiği bir sayfayı yeniden ziyaret ettiğini düşünün; sunucuya yeni bir istek göndermek ve verilerin tekrar getirilmesini beklemek yerine, uygulama depolanan yanıtı neredeyse anında sunabilir. Bu sadece değerli zaman kazandırmakla kalmaz, aynı zamanda daha sorunsuz ve daha duyarlı bir arayüz sağlar.
Özel Bir Önbelleğe Alma Bileşeni Oluşturma
React'te özel bir önbelleğe alma bileşeni oluşturmak, verilerin nasıl önbelleğe alındığı ve yönetildiği üzerinde kesin kontrol sağlar. Bu bölüm, böyle bir bileşenin oluşturulmasına yönelik adım adım bir kılavuz ve dezavantajları hakkında bir tartışma sunmaktadır.
Bileşen Kurulumu
İlk olarak, verileri getirmek ve önbelleğe almakla sorumlu olacak temel bir React bileşeni ayarlayın.
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>
);
};
Durum Yönetimi
useState kancası, hem önbelleğe alınmış verileri hem de getirilen mevcut verileri yönetmek için kullanılır. Bu, bileşenin önbelleğe alınmış verileri mi yoksa yeni bir API çağrısı mı sunacağını belirlemesini sağlar.
Veri Getirme ve Önbelleğe Alma
useEffect kancası, bir ağ isteği yapmadan önce önbelleği kontrol etme mantığını içerir. Veriler önbellekte bulunursa, doğrudan kullanılır; aksi takdirde, bir getirme isteği yapılır ve sonuç önbellekte saklanır.
Veri Süresi Dolumu
Önbellek geçersiz kılmayı işlemek için, önbelleğe alınmış veriler için bir yaşam süresi (TTL) ayarlayabilirsiniz. Bu, verilerin periyodik olarak yenilenmesini ve güncel kalmasını sağlar.
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>
);
};
Özel Önbelleğe Almanın Dezavantajları
Özel bir önbelleğe alma bileşeni oluşturmak esneklik sunarken, aynı zamanda çeşitli dezavantajları da beraberinde getirir:
- Karmaşıklık: Özel önbelleğe alma mantığı, kod tabanına önemli ölçüde karmaşıklık katabilir ve bu da bakımını ve hata ayıklamasını zorlaştırır.
- Bakım: Önbelleğe alma mantığının uygulamanın geliştikçe doğru çalışmaya devam etmesini sağlamak için düzenli güncellemeler ve bakım gereklidir.
- Ölçeklenebilirlik Sorunları: Uygulama büyüdükçe, özel önbelleğe alma çözümlerini yönetmek giderek zorlaşabilir ve potansiyel olarak performans darboğazlarına yol açabilir.
Bu zorlukları anlayarak, geliştiriciler özel önbelleğe almayı ne zaman uygulayacakları ve daha gelişmiş araçlardan ne zaman yararlanacakları konusunda bilinçli kararlar verebilirler
Önbelleğe Alma İçin NPM Paketlerini Kullanma
NPM paketlerinden yararlanmak, React uygulamalarında önbelleğe almanın uygulanmasını büyük ölçüde basitleştirebilir. İşte başlamanıza yardımcı olabilecek birkaç popüler paket:
axios-cache-adapter
axios-cache-adapter, önbelleğe alma yeteneklerini popüler bir HTTP istemcisi olan axios'a entegre eder.
Kurulum:
npm install axios axios-cache-adapter
Kullanım:
// Bağımlılıkları içe aktar
import axios from 'axios'
import { setupCache } from 'axios-cache-adapter'
// `axios-cache-adapter` örneği oluştur
const cache = setupCache({
maxAge: 15 * 60 * 1000
})
// Yeni oluşturulan `cache.adapter` öğesini geçirerek `axios` örneği oluştur
const api = axios.create({
adapter: cache.adapter
})
// Bazı REST api'lerine GET isteği gönder
api({
url: 'http://some-rest.api/url',
method: 'get'
}).then(async (response) => {
// response.data ile harika bir şeyler yap \o/
console.log('Request response:', response)
// `localForage` API'si için mağaza ile etkileşim kurma.
const length = await cache.store.length()
console.log('Cache store length:', length)
})lru-cache
lru-cache, en son kullanılan (LRU) bir önbellek uygular.
Kurulum:
npm install lru-cache
Kullanım:
import LRU from 'lru-cache';
const cache = new LRU({ max: 100 }); // Önbellekteki maksimum öğe sayısı
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, istemci tarafı depolama için düşük seviyeli bir API olan IndexedDB'de anahtar-değer çiftlerini depolamayı basitleştirir.
Kurulum:
npm install idb-keyval
Kullanım:
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;
};
Bu paketler, React uygulamalarınızda önbelleğe almayı uygulamak için basit bir yol sunarak, önbelleğe alınmış verileri manuel olarak yönetmek için gereken karmaşıklığı ve çabayı azaltır. Bu araçları kullanarak, verimli veri alma ve gelişmiş performans sağlarken, uygulamanızın özelliklerini geliştirmeye daha fazla odaklanabilirsiniz.
API Önbelleğe Alma İçin Gelişmiş Araçlara Giriş
React'te API yanıtlarını önbelleğe almaya gelince, React Query ve SWR gibi gelişmiş araçlar, özel olarak oluşturulmuş önbelleğe alma mekanizmalarının yeteneklerini aşan sağlam, özellik açısından zengin çözümler sunar. Bu araçlar, durum yönetimini basitleştirmek, veri getirmeyi geliştirmek ve veri tutarlılığını sağlamak için tasarlanmıştır; bunların tümü sorunsuz bir geliştirici deneyimi sağlarken.
TanStack Query
TanStack Query (FKA React Query), React uygulamaları için sunucu tarafı verileri yönetmenin karmaşıklıklarını ortadan kaldıran güçlü bir veri getirme kütüphanesidir. React Query, React uygulamalarınızda sunucu durumunu nasıl ele aldığınızı dönüştürür. Yerleşik önbelleğe alma, arka plan güncellemeleri ve hata işleme için kullanıma hazır destek sunarak, önbelleğe alma ve durum senkronizasyonunu manuel olarak yönetmeye gerek kalmadan veri getirme mantığını yönetmeyi kolaylaştırır.
Özel Çözümlere Göre Avantajları:
Basitleştirilmiş Durum Yönetimi:
React Query, önbelleğe alma ve durum yönetiminin inceliklerini ele alarak geliştiricilerin uygulama mantığına odaklanmasını sağlar. Önbelleğe alma, geçersiz kılma ve verileri yeniden getirme karmaşıklıklarını soyutlayarak temiz ve sezgisel bir API sağlar.
Otomatik Arka Plan Yenileme:
React Query, verileri güncel tutmak için verileri arka planda otomatik olarak yeniden getirebilir. Bu, uygulamanızın manuel yenileme tetikleyicilerine gerek kalmadan her zaman en güncel verileri görüntülemesini sağlar.
İyimser Güncellemeler:
İyimser güncellemelerle, React Query, sunucu güncellemeyi onaylamadan önce UI'deki değişiklikleri hemen yansıtabilir. Bu, kullanıcıların eylemlerinin anında yansıtıldığını görebilmesiyle sorunsuz ve duyarlı bir kullanıcı deneyimi sağlar.
Örnek:
npm install react-query // paketi yükleyin
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>
)
}
Yukarıdaki kod, resmi belgeler sayfasından alınmıştır ve veri getirmenin temel yolunu açıklamaktadır. Yukarıdaki kodlardan görebileceğiniz gibi, TanStack Query, verileri getirmemizi kolaylaştırır ve ayrıca bu verileri kolayca önbelleğe alır.
SWR (Stale-While-Revalidate)
Vercel tarafından geliştirilen SWR, basitlik ve verimliliği vurgulayan, React için bir başka popüler veri getirme kütüphanesidir. "SWR" adı, eski verileri taze verileri arka planda getirirken sunan bir önbelleğe alma stratejisi olan "stale-while-revalidate" anlamına gelir.
SWR, veri getirme ve önbelleğe alma için son derece sezgisel bir API sağlar. Uygulamanızın verileri hemen (eski veriler) görüntülemesini ve ardından arka planda taze verileri getirerek yeniden doğrulanmasını sağlar. Bu strateji, performans ve veri tazeliği arasında bir denge sağlar.
Özel Çözümlere Göre Avantajları:
Kullanım Kolaylığı:
SWR'nin API'si basit ve kullanımı kolaydır, bu da onu her beceri seviyesindeki geliştiriciler için erişilebilir hale getirir. Veri getirme, önbelleğe alma, senkronizasyon ve hata işlemeyi minimum yapılandırmayla ele alır.
Veri Tutarlılığı:
SWR, uygulama verilerinizin her zaman taze olmasını sağlar. Verileri arka planda otomatik olarak yeniden doğrular ve kullanıcılara manuel yenilemeler gerektirmeden en güncel bilgileri sağlar.
Hata İşleme:
SWR'deki yerleşik hata işleme, veri getirme sırasında hataları yönetmeyi kolaylaştırır. Veri getirme başarısız olduğunda hata mesajları veya yedek UI bileşenleri görüntülemek için kancalar sağlar.
Örnek:
npm install swr // paketi yükleyin
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>
);
};
Hem React Query hem de SWR, React uygulamalarında sunucu tarafı verileri yönetmek için kapsamlı çözümler sunar. Verileri getirme, önbelleğe alma ve senkronize etme sürecini basitleştirir, özel önbelleğe alma mantığına olan ihtiyacı azaltan güçlü özellikler sunar. Geliştiriciler, bu araçlardan yararlanarak uygulamalarının verimli, performanslı olmasını ve sorunsuz bir kullanıcı deneyimi sunmasını sağlayabilirler.
Apidog ile Çalışmak

Apidog, sağlam dokümantasyon, otomatik test ve gerçek zamanlı izleme sunarak API güvenliğini artırır. Apidog ayrıca, API'lerinizin kullanıcı verilerini etkili bir şekilde korumasını sağlayarak GDPR ve HIPAA gibi endüstri standartlarına uyulmasına yardımcı olur.
Ek olarak, Apidog ekip işbirliğini destekleyerek güvenliğe odaklı bir geliştirme ortamı oluşturur. Apidog'u entegre ederek, verilerinizi ve kullanıcılarınızı çeşitli güvenlik tehditlerinden koruyarak güvenli, güvenilir ve uyumlu API'ler oluşturabilirsiniz.
Sonuç
Modern web uygulamalarının performansını ve kullanıcı deneyimini geliştirmek için API yanıt sürelerini optimize etmek çok önemlidir. API yanıtlarını önbelleğe almak, sunucu yükünü önemli ölçüde azaltabilir ve veri alma hızlarını artırabilir. React'te özel önbelleğe alma bileşenleri oluşturmak esneklik sunarken, React Query ve SWR gibi gelişmiş araçlardan yararlanmak süreci kolaylaştırabilir ve otomatik arka plan güncellemeleri ve hata işleme gibi ek özellikler sağlayabilir.
Ayrıca, axios-cache-adapter, lru-cache ve idb-keyval gibi NPM paketlerini kullanmak, önbelleğe alma uygulamalarını basitleştirebilir ve önbelleğe alınmış verileri yönetmenin karmaşıklığını azaltabilir. Kapsamlı API yönetimi için, Apidog gibi araçlar, geliştirme yaşam döngüsü boyunca güvenilirliği ve verimliliği sağlayarak API tasarımı, test etme ve izleme için sağlam çözümler sunar.
Geliştiriciler, bu araçları ve stratejileri birleştirerek, sorunsuz bir kullanıcı deneyimi sunan duyarlı ve performanslı uygulamalar oluşturabilirler.



