Lajiverta Academy Satın Al — 499₺

Academy 🔌 Backend & API Sunucu Nedir?

Metin değil, veri döndür: res.json

🔌 Sunucu Nedir? bölümü · Code Quest Backend & API parkuru

res.send('ayakta') insana hitap eder. Ama API'nin karşısında genelde insan değil program vardır: bir mobil uygulama, bir web sayfası, başka bir sunucu. Programların anladığı ortak dil ise JSON'dur.

Bunun için res.json(...) kullanılır. Verdiğin JavaScript nesnesini metne çevirir ve cevaba "bu bir JSON" etiketini (content-type: application/json) ekler:

SUNUCU KODU (Node · Express)
const app = express();

app.get('/oyunlar/3', (req, res) => {
  res.json({ id: 3, ad: 'Gölge Avcısı', fiyat: 249 });
});

send('GET', '/oyunlar/3');
▸ HTTP TRAFİĞİ
GET /oyunlar/3
← 200 OK
content-type: application/json
{
  "id": 3,
  "ad": "Gölge Avcısı",
  "fiyat": 249
}

Fark iki yerde: cevabın content-type başlığı ve gövdenin biçimi. Bu etiket sayesinde istemci "gelen şey metin değil, ayrıştırılabilir veri" olduğunu anlar.

Bir dizi de döndürebilirsin — API'lerde liste döndürmek en sık yapılan iştir:

SUNUCU KODU (Node · Express)
const app = express();

app.get('/turler', (req, res) => {
  res.json(store.turler);
});

send('GET', '/turler');
▸ HTTP TRAFİĞİ
GET /turler
← 200 OK
content-type: application/json
[
  {
    "id": 1,
    "ad": "Aksiyon"
  },
  {
    "id": 2,
    "ad": "Bulmaca"
  },
  {
    "id": 3,
    "ad": "Yarış"
  },
  {
    "id": 4,
    "ad": "Strateji"
  },
  {
    "id": 5,
    "ad": "Macera"
  }
]

İstersen veriyi işleyip döndürebilirsin; sonuçta bu sıradan bir JavaScript fonksiyonu:

SUNUCU KODU (Node · Express)
const app = express();

app.get('/oyunlar/adlar', (req, res) => {
  const adlar = store.oyunlar.map(o => o.ad);
  res.json({ toplam: adlar.length, adlar: adlar.slice(0, 3) });
});

send('GET', '/oyunlar/adlar');
▸ HTTP TRAFİĞİ
GET /oyunlar/adlar
← 200 OK
content-type: application/json
{
  "toplam": 12,
  "adlar": [
    "Neon Drift",
    "Piksel Kale",
    "Gölge Avcısı"
  ]
}
💡 res.send insan içindir (metin/HTML), res.json program içindir. Bir API yazıyorsan cevabın neredeyse her zaman res.json olmalıdır.

Kendini test et

3000 sayısı neyi ifade eder?

  • Sunucunun saniyede kaç istek karşılayacağını
  • Sunucunun dinlediği port numarasını
  • Cevabın milisaniye cinsinden süresini
Cevabı gör

Cevap: Sunucunun dinlediği port numarasını

Port, makinedeki kapı numarasıdır. localhost:3000 adresindeki 3000 tam olarak budur.

Bu kodun çıktısı ne olur?

const app = express();
app.get('/sayi', (req, res) => res.json({ toplam: store.oyunlar.length }));
send('GET', '/sayi');
Cevabı gör

Çıktı:

→ GET /sayi
← 200 OK
content-type: application/json
{
  "toplam": 12
}

store.oyunlar 12 kayıt içerir; res.json bunu JSON gövdesi olarak gönderir ve content-type'ı application/json yapar.