Node.js İle Axios Kullanarak Harici Api Verisi Çekme Nasıl Yapılır?

Node.js İle Axios Kullanarak Harici Api Verisi Çekme Nasıl Yapılır?
Node.js İle Axios Kullanarak Harici Api Verisi Çekme Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Çalışmaya başlamadan önce bilgisayarınızda Node.js'in güncel bir sürümünün (LTS sürümü önerilir) yüklü olduğundan emin olmalısınız. Projenizi başlatmak ve Axios kütüphanesini kurmak için aşağıdaki adımları takip edin.

  1. Terminalinizi açın ve proje klasörünüzü oluşturun: mkdir api-projesi && cd api-projesi
  2. Projenizi başlatın: npm init -y
  3. Axios kütüphanesini projeye dahil edin: npm install axios

Kurulum tamamlandıktan sonra, projenizin kök dizininde bir index.js dosyası oluşturun. Bu dosya, tüm API isteklerimizi yöneteceğimiz ana merkezimiz olacaktır.

Axios ile Temel GET İsteği Nasıl Yapılır?

Axios kullanarak bir API'den veri çekmek oldukça basittir. GET metodu, sunucudan belirli bir kaynağı almak için kullanılır. Aşağıdaki kod örneği, örnek bir JSON API'sine istek göndererek veriyi konsola yazdırır.

const axios = require('axios');

async function veriGetir() {
  try {
    const cevap = await axios.get('https://jsonplaceholder.typicode.com/posts/1');
    console.log('Gelen Veri:', cevap.data);
  } catch (hata) {
    console.error('Veri çekilirken hata oluştu:', hata.message);
  }
}

veriGetir();

Bu kodda async/await yapısını kullanarak işlemin tamamlanmasını bekledik. cevap.data alanı, sunucudan dönen JSON verisini otomatik olarak JavaScript nesnesine dönüştürülmüş halde tutar.

Hata Yönetimi ve İstek Yapılandırması

Gerçek dünya projelerinde API'ler her zaman başarılı yanıt dönmeyebilir. Sunucu hataları, ağ bağlantı sorunları veya geçersiz endpoint (uç nokta) durumlarını yönetmek için try-catch bloklarını kullanmak zorunludur. Ayrıca, isteğinize başlık (header) veya sorgu parametreleri eklemeniz gerekebilir.

const axios = require('axios');

async function detayliIstek() {
  try {
    const config = {
      params: { userId: 1 },
      headers: { 'Authorization': 'Bearer TOKEN_BURAYA' }
    };
    const cevap = await axios.get('https://jsonplaceholder.typicode.com/posts', config);
    console.log('Başarılı yanıt:', cevap.status);
  } catch (hata) {
    if (hata.response) {
      console.log('Sunucu hatası:', hata.response.status);
    } else {
      console.log('Ağ hatası:', hata.message);
    }
  }
}

detayliIstek();

Burada config nesnesi ile API'ye ek parametreler gönderdik. hata.response kontrolü, sunucunun hata döndürdüğü durumları ayırt etmemizi sağlar.

Axios ve Fetch API Karşılaştırması

Node.js ortamında veri çekmek için yerleşik fetch API'si de kullanılabilir. Ancak Axios, sunduğu özelliklerle geliştirici deneyimini iyileştirir.

Özellik Axios Fetch API
JSON Dönüşümü Otomatik Manuel (.json())
Hata Yönetimi HTTP hatalarını yakalar Sadece ağ hatalarını yakalar
İstek İptali Destekler AbortController gerekir

Güvenli API İstekleri ve Çevresel Değişkenler

Kritik Uyarı: API anahtarlarınızı (API Key) asla kod içerisinde doğrudan yazmayın. Bu, güvenlik açığına yol açar. Her zaman dotenv gibi kütüphaneler kullanarak hassas verileri .env dosyalarında saklayın.

API anahtarınızı gizlemek için npm install dotenv komutuyla kütüphaneyi kurun ve bir .env dosyası oluşturun. Ardından aşağıdaki yöntemi kullanın:

require('dotenv').config();
const axios = require('axios');

const apiIstegi = async () => {
  const url = process.env.API_URL;
  const anahtar = process.env.API_KEY;
  
  const cevap = await axios.get(url, { headers: { 'x-api-key': anahtar } });
  return cevap.data;
};

Farklı HTTP Metotları: POST, PUT ve DELETE

API'lerden sadece veri çekmekle kalmaz, aynı zamanda veri gönderebilir veya güncelleyebilirsiniz. Axios, tüm HTTP metotları için uygun metodolojiler sunar.

// Veri gönderme (POST)
const yeniVeriEkle = async (yeniPost) => {
  const cevap = await axios.post('https://jsonplaceholder.typicode.com/posts', yeniPost);
  console.log('Eklenen ID:', cevap.data.id);
};

// Veri güncelleme (PUT)
const veriGuncelle = async (id, guncelVeri) => {
  await axios.put(`https://jsonplaceholder.typicode.com/posts/${id}`, guncelVeri);
};

Bu metotlar, veritabanı işlemlerinde veya kullanıcı kayıt formlarında sıklıkla kullanılır. İstek gövdesini (body) genellikle bir JavaScript nesnesi olarak göndeririz ve Axios bunu otomatik olarak JSON formatına çevirir.

Sıkça Sorulan Sorular

Axios'ta zaman aşımı (timeout) nasıl ayarlanır?

İstek yapılandırması içerisine timeout: 5000 (milisaniye cinsinden) ekleyerek sunucunun 5 saniye içinde yanıt vermemesi durumunda isteği iptal edebilirsiniz.

Axios ile aynı anda birden fazla istek nasıl atılır?

axios.all veya Promise.all kullanarak birden fazla uç noktaya eş zamanlı istek gönderebilir ve tüm sonuçları tek bir dizide toplayabilirsiniz.

Axios'ta interceptor nedir?

Interceptor'lar, istek veya yanıt henüz then veya catch bloğuna ulaşmadan önce araya girip işlem yapmanızı (örneğin her isteğe token eklemek) sağlayan araçlardır.

Neden Axios kullanmalıyım?

Axios; otomatik JSON dönüştürme, geniş tarayıcı/Node.js desteği, istek iptali ve hata yönetimi kolaylığı gibi nedenlerle profesyonel projelerde standart kabul edilir.

Axios ile dosya yükleme mümkün mü?

Evet, FormData nesnesini kullanarak Axios üzerinden sunucuya dosya yükleme işlemlerini kolayca gerçekleştirebilirsiniz.

Yasal Uyarı: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Uygulamanızda kullanacağınız harici API'lerin kullanım koşullarına ve veri gizliliği politikalarına uymak geliştiricinin sorumluluğundadır. Kod güvenliği için her zaman girdi doğrulama (input validation) ve çıktı kodlama (output encoding) yöntemlerini uygulayın.

Axios İsteklerinde Performans Optimizasyonu ve Önbellekleme

Node.js uygulamalarında yüksek trafikli API'lerle çalışırken, her istekte ağ üzerinden veri çekmek hem gecikmeye (latency) neden olur hem de API limitlerinize (rate limiting) takılmanıza yol açabilir. Performansı artırmak için istekleri önbelleğe almak (caching) kritik bir stratejidir.

Axios'un yerleşik bir önbellekleme mekanizması yoktur, ancak axios-cache-interceptor gibi kütüphanelerle bu süreci kolayca yönetebilirsiniz. Aşağıdaki örnekte, bir isteğin sonucunu belirli bir süre bellekte tutarak tekrar eden istekleri nasıl optimize edebileceğinizi görebilirsiniz.

const axios = require('axios');
const { setupCache } = require('axios-cache-interceptor');

const instance = axios.create();
const axiosWithCache = setupCache(instance);

async function getCachedData() {
  try {
    // Aynı URL'ye yapılan ikinci istek, ağa gitmeden bellekten döner
    const response = await axiosWithCache.get('https://api.ornek.com/veriler', {
      cache: {
        ttl: 1000 * 60 * 5 // 5 dakika boyunca önbellekte tut
      }
    });
    console.log('Veri alındı:', response.data);
  } catch (error) {
    console.error('Hata oluştu:', error.message);
  }
}

getCachedData();

Axios İsteklerini Test Etme: Nock Kullanımı

Harici API'lere bağımlı kodları test ederken, gerçek API'ye her seferinde istek atmak hem yavaştır hem de test ortamınızın kararsız çalışmasına neden olabilir. nock kütüphanesi, Node.js tarafında HTTP isteklerini "mock"lamak (taklit etmek) için endüstri standardıdır.

Aşağıdaki örnek, bir API isteğini gerçek ağ trafiğine çıkmadan nasıl simüle edebileceğinizi göstermektedir:

const axios = require('axios');
const nock = require('nock');

// Test senaryosu: API'nin 200 dönmesini simüle et
nock('https://api.ornek.com')
  .get('/kullanici/1')
  .reply(200, {
    id: 1,
    isim: 'Test Kullanıcısı'
  });

async function testApiCall() {
  const response = await axios.get('https://api.ornek.com/kullanici/1');
  console.log('Mock veri:', response.data);
  // Çıktı: Mock veri: { id: 1, isim: 'Test Kullanıcısı' }
}

testApiCall();

Test Süreçlerinde Dikkat Edilmesi Gerekenler

  • İzolasyon: Her test dosyasında nock.cleanAll() kullanarak önceki testlerden kalan mock yapılandırmalarını temizleyin.
  • Hata Senaryoları: Sadece başarılı yanıtları değil, 404 veya 500 gibi hata durumlarını da nock ile simüle ederek uygulamanızın hata yönetimi mantığını doğrulayın.
  • Gerçekçi Veri: Mock verilerinizin, gerçek API'den dönen JSON şemasıyla birebir aynı olduğundan emin olun.

Sonuç

Node.js ve Axios ikilisi, harici API'lerle çalışırken size büyük bir esneklik ve hız kazandırır. Bu rehberde, basit bir GET isteğinden güvenli API anahtarı yönetimine ve farklı HTTP metotlarının kullanımına kadar temel süreçleri tamamladık. Bir sonraki adım olarak, Axios Interceptor'larını kullanarak merkezi bir hata yönetimi yapısı kurmayı veya axios-retry gibi kütüphanelerle ağ kopmalarına karşı otomatik yeniden deneme mekanizmaları eklemeyi deneyebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Selin Yılmaz

Kişisel gelişim ve zaman yönetimi odaklı pratik teknikler üzerine çalışıyorum. Günlük rutinleri iyileştiren, zaman kazandıran yöntemleri bilimsel temellere dayandırarak editöryal bir dille paylaşıyorum.

Yorumlar (0)

Yorum Yaz