Hızlı özet

API, bir yazılımın başka bir yazılımla kontrollü şekilde konuşmasını sağlayan arayüzdür. REST düzenli veri alma/gönderme işleri için yaygındır. GraphQL, istemcinin ihtiyacı olan veriyi seçmesine izin verir. WebSocket ise canlı ve sürekli veri akışı gereken yerlerde kullanılır.

Bu yazıda neler var?

  • API nedir?
  • İstemci-sunucu mantığı nasıl çalışır?
  • REST API nedir ve nerelerde kullanılır?
  • GraphQL neyi farklı yapar?
  • WebSocket neden canlı uygulamalar için önemlidir?
  • Gerçek senaryolarda hangisi tercih edilmeli?
  • Yeni başlayan biri önce hangisini öğrenmeli?
Ana fikir: Her API türü aynı problemi çözmez. REST düzenli veri alışverişi için güçlüdür, GraphQL karmaşık veri ihtiyaçlarında esneklik sağlar, WebSocket ise anlık iletişim gereken yerlerde devreye girer.

API Nedir?

API, “Application Programming Interface” ifadesinin kısaltmasıdır. Türkçeye “Uygulama Programlama Arayüzü” olarak çevrilebilir. En sade haliyle API, bir yazılımın başka bir yazılıma hangi kurallarla istek gönderebileceğini ve karşılığında nasıl cevap alacağını tanımlar.

Günlük hayattan klasik bir benzetme yapmak gerekirse API, restorandaki menü ve garson gibi düşünülebilir. Sen mutfağa girip yemeği kendin yapmazsın. Menüden ne istediğini seçersin, garson siparişi mutfağa iletir, mutfak da sonucu sana döndürür. Yazılım dünyasında da mobil uygulama, tarayıcı veya başka bir servis doğrudan veritabanına girmez; API’ye istek gönderir, API de kurallara uygun cevabı döner.

Fakat API’yi sadece bu benzetmeyle bırakmak eksik olur. Gerçek yazılım dünyasında API; veri güvenliği, kullanıcı yetkisi, performans, canlı veri akışı, mobil uygulama entegrasyonu, üçüncü parti servis bağlantıları ve otomasyon gibi birçok konunun merkezinde yer alır.

API, modern yazılımların birbirine bağlanmasını sağlayan görünmez köprüdür. Kullanıcı genellikle API’yi görmez; ama yaptığı işlemlerin büyük bölümü API üzerinden gerçekleşir.

İstemci ve Sunucu Mantığı

API’yi anlamanın en önemli adımı istemci ve sunucu ilişkisini anlamaktır. İstemci; tarayıcı, mobil uygulama, masaüstü programı veya başka bir servis olabilir. Sunucu ise veriyi saklayan, işleyen ve kurallara göre cevap dönen taraftır.

Örneğin bir hava durumu uygulamasını açtığında telefonun istemci olur. Uygulama sunucuya “İzmir için bugünkü hava durumu nedir?” diye istek gönderir. Sunucu hava durumu verisini işler ve uygulamaya JSON gibi yapılandırılmış bir cevap döner. Uygulama da bu cevabı ekranda sıcaklık, rüzgar ve yağış bilgisi olarak gösterir.

1

İstemci istek gönderir

Tarayıcı, mobil uygulama veya başka bir servis API’ye veri ister ya da veri gönderir.

2

Sunucu işler

Sunucu isteği kontrol eder, yetkiyi doğrular, veritabanı veya başka servislerle konuşur.

3

Cevap döner

API genellikle JSON formatında sonuç döner; istemci bu veriyi kullanıcıya gösterir.

Endpoint, Request ve Response Ne Demek?

API dünyasında sık duyacağın üç kavram vardır: endpoint, request ve response. Endpoint, API içinde belirli bir iş için kullanılan adrestir. Request, istemcinin gönderdiği istektir. Response ise sunucunun döndürdüğü cevaptır.

Basit API akışı
İstemci:
GET /haberler

Sunucu:
[
  {
    "id": 1,
    "baslik": "Yeni teknoloji haberi",
    "kategori": "Teknoloji"
  },
  {
    "id": 2,
    "baslik": "Yapay zeka gelişmesi",
    "kategori": "Yapay Zeka"
  }
]

Burada GET /haberler bir endpoint isteğidir. Sunucu da haberleri JSON formatında döndürür. Frontend tarafı bu JSON verisini alır ve kullanıcıya kart, liste veya tablo olarak gösterir.

REST API Nedir?

REST, web dünyasında en yaygın API yaklaşımıdır. REST API’de veriler genellikle “resource”, yani kaynak mantığıyla düşünülür. Haberler, kullanıcılar, siparişler, ürünler, yorumlar veya stok kayıtları birer kaynak gibi ele alınır. Bu kaynaklar URL’ler üzerinden temsil edilir.

REST API’nin gücü sadeliğinden gelir. HTTP metotlarıyla ne yapmak istediğini belirtirsin: veri almak için GET, yeni kayıt oluşturmak için POST, var olan kaydı güncellemek için PUT veya PATCH, silmek için DELETE kullanılır.

REST API örnekleri
# Haberleri listele
GET /haberler

# ID'si 15 olan haberi getir
GET /haberler/15

# Yeni sipariş oluştur
POST /siparisler

# ID'si 7 olan kullanıcıyı güncelle
PUT /kullanicilar/7

# ID'si 22 olan yorumu sil
DELETE /yorumlar/22

REST özellikle CRUD işlemlerinde çok rahattır. CRUD; Create, Read, Update, Delete anlamına gelir. Yani oluşturma, okuma, güncelleme ve silme işlemleri. Bir yönetim paneli, haber sitesi, stok takip sistemi, bayi portalı veya mobil uygulama backend’i için REST çoğu zaman çok iyi bir başlangıçtır.

REST için kısa özet: İstek gönder, cevap al. Kaynaklar URL’lerle temsil edilir. HTTP metotları, o kaynak üzerinde ne yapmak istediğini anlatır.

REST API Gerçek Dünya Örnekleri

REST’i gerçek örneklerle düşünmek çok daha kolaydır. Bir haber sitesinde kategoriye göre içerik çekmek, bir e-ticaret sitesinde sipariş oluşturmak, bir mobil uygulamada kullanıcı profilini güncellemek veya bir stok takip sisteminde ürün listesini almak REST ile gayet doğal çözülebilir.

Haber sitesi

GET /haberler?kategori=teknoloji ile teknoloji haberleri listelenebilir.

Hava durumu uygulaması

GET /hava-durumu?sehir=Izmir ile şehir bazlı hava durumu verisi alınabilir.

Stok takip sistemi

GET /urunler, POST /stok-hareketleri gibi endpoint’lerle ürün ve stok işlemleri yapılabilir.

Mobil sipariş uygulaması

Kullanıcı mobil uygulamadan sipariş gönderdiğinde POST /siparisler endpoint’i çalışabilir.

REST’in Güçlü ve Zayıf Tarafları

REST’in en güçlü tarafı yaygın, anlaşılır ve öğrenmesi kolay olmasıdır. Hemen hemen her programlama dili, framework, test aracı ve API platformu REST ile rahat çalışır. Bu yüzden yeni başlayan biri için API öğrenmenin en doğru başlangıç noktası çoğu zaman REST’tir.

Ancak REST her zaman mükemmel çözüm değildir. Bazen istemci ihtiyacından fazla veri alır. Bazen de ihtiyacı olan tüm veriyi toplamak için birden fazla endpoint çağırmak zorunda kalır. Örneğin bir kullanıcı profil ekranı için kullanıcı bilgisi, son siparişler, favoriler, bildirimler ve yetkiler ayrı endpoint’lerden geliyorsa, frontend tarafında çok fazla istek oluşabilir.

REST’in tipik sorunu: Bazen fazla veri getirir, bazen eksik veri getirir. Karmaşık ekranlarda birden fazla endpoint çağrısı gerekebilir.

GraphQL Nedir?

GraphQL, API tarafında farklı bir bakış açısı sunar. REST’te endpoint genellikle ne döneceğini büyük ölçüde belirler. GraphQL’de ise istemci, hangi veriye ihtiyacı olduğunu sorgu içinde açıkça söyler. Yani “sunucu ne verirse onu alayım” yerine “ben şu alanları istiyorum” mantığı öne çıkar.

Bu özellikle karmaşık veri yapılarında çok işe yarar. Örneğin kullanıcı profil ekranında sadece kullanıcının adı, e-posta adresi ve son üç siparişi gerekiyorsa, GraphQL sorgusu sadece bu alanları isteyebilir. Gereksiz alanlar gelmez, eksik alan için ikinci istek atmak da çoğu zaman gerekmez.

GraphQL sorgu örneği
query {
  kullanici(id: 7) {
    ad
    eposta
    sonSiparisler(limit: 3) {
      id
      tarih
      toplamTutar
    }
  }
}

Bu sorgu şunu söyler: “ID’si 7 olan kullanıcının adını, e-posta adresini ve son 3 siparişinin id, tarih ve toplam tutar bilgisini getir.” Eğer kullanıcının adresi, telefon numarası veya tüm sipariş detayları gerekmiyorsa bunlar istenmez.

GraphQL için kısa özet: İstemci ihtiyacı olan veriyi seçer. Bu yaklaşım, karmaşık ekranlarda fazla/eksik veri problemini azaltabilir.

GraphQL Gerçek Dünya Örnekleri

GraphQL özellikle bir ekranda farklı veri parçalarının birlikte gösterildiği sistemlerde çok kullanışlıdır. Büyük yönetim panelleri, kullanıcı dashboard’ları, raporlama ekranları, mobil uygulamalar ve çok ilişkili veri yapıları buna örnektir.

Kullanıcı profil ekranı

Kullanıcının sadece adı, profil fotoğrafı, son siparişleri ve bildirim sayısı tek sorguda çekilebilir.

Büyük yönetim paneli

Kullanıcı, sipariş, stok, rapor ve yetki bilgileri aynı ekran için kontrollü şekilde istenebilir.

Mobil uygulama

Mobil cihazlarda gereksiz veri taşımamak için sadece ekranda gösterilecek alanlar çekilebilir.

Raporlama ekranı

Birden fazla ilişkili tablodan özet veri almak gerektiğinde GraphQL sorguları daha esnek olabilir.

GraphQL’in Güçlü ve Zayıf Tarafları

GraphQL’in güçlü tarafı esnekliktir. Frontend ekibi hangi veriye ihtiyacı olduğunu daha net ifade edebilir. Backend tarafında çok sayıda küçük endpoint tasarlamak yerine daha merkezi bir sorgulama modeli kurulabilir.

Ancak GraphQL de her derde deva değildir. Sunucu tarafı tasarımı daha dikkat ister. Yetkilendirme, sorgu karmaşıklığı, performans, cache stratejisi ve veri modelinin doğru kurulması önemlidir. Basit bir blog listesi veya temel CRUD paneli için GraphQL bazen gereğinden fazla karmaşık olabilir.

Önemli nokta: GraphQL “REST’in daha yeni ve her zaman daha iyi hali” değildir. Farklı bir ihtiyaca cevap verir. Basit sistemlerde REST daha sade ve yeterli olabilir.

WebSocket Nedir?

REST ve GraphQL çoğunlukla “istek gönder, cevap al” mantığıyla çalışır. WebSocket ise farklıdır. WebSocket bağlantısında istemci ile sunucu arasında sürekli açık kalan çift yönlü bir kanal kurulur. Böylece sunucu da istemciye anlık veri gönderebilir.

Bunu canlı mesajlaşma uygulaması üzerinden düşünelim. REST ile her birkaç saniyede bir “yeni mesaj var mı?” diye sunucuya sormak gerekir. Bu yöntem çalışır ama verimsizdir. WebSocket’te ise bağlantı açık kalır. Yeni mesaj geldiği anda sunucu bunu istemciye iletebilir.

WebSocket mantığını gösteren basit örnek
const socket = new WebSocket("wss://api.example.com/live");

socket.onopen = () => {
  console.log("Canlı bağlantı açıldı.");
};

socket.onmessage = (event) => {
  const veri = JSON.parse(event.data);
  console.log("Yeni veri geldi:", veri);
};

socket.onclose = () => {
  console.log("Bağlantı kapandı.");
};

Burada tarayıcı sunucuya bir WebSocket bağlantısı açar. Bağlantı açık kaldığı sürece sunucu yeni veri gönderebilir. Bu yapı canlı sohbet, anlık borsa fiyatı, canlı maç skoru, oyun, araç takip sistemi ve anlık bildirimler için çok uygundur.

WebSocket için kısa özet: Bağlantı açık kalır, veri canlı gelir. İstemci sürekli “yeni bir şey var mı?” diye sormak zorunda kalmaz.

WebSocket Gerçek Dünya Örnekleri

WebSocket’in en net anlaşıldığı yerler gerçek zamanlı uygulamalardır. Eğer veri sürekli değişiyor ve kullanıcı bunu anlık görmeli ise WebSocket güçlü bir seçenektir.

Canlı mesajlaşma

WhatsApp benzeri uygulamalarda yeni mesajlar ekrana anlık düşmelidir. WebSocket bu senaryo için çok uygundur.

Borsa ve kripto ekranı

Fiyatlar saniyeler içinde değiştiği için sürekli yenileme yerine canlı veri akışı gerekir.

Canlı maç skoru

Gol, kart, oyuncu değişikliği veya süre bilgisi anlık olarak kullanıcıya iletilebilir.

Araç takip sistemi

Harita üzerinde araçların konumu sürekli değiştiği için canlı bağlantı deneyimi daha doğru olur.

REST, GraphQL ve WebSocket Farkı

Bu üç yaklaşımı birbirinin rakibi gibi değil, farklı ihtiyaçlara cevap veren araçlar gibi düşünmek daha doğrudur. REST düzenli veri alışverişinde güçlüdür. GraphQL karmaşık veri ihtiyaçlarında esneklik sağlar. WebSocket ise anlık veri akışı gereken yerlerde öne çıkar.

Yaklaşım
En uygun olduğu yer
Mantık
REST
Klasik veri alma/gönderme işlemleri, CRUD paneller, haber siteleri, stok sistemleri, sipariş akışları.
İstek gönder, cevap al. Kaynaklar URL’lerle temsil edilir.
GraphQL
Karmaşık veri yapıları, mobil uygulamalar, büyük dashboard’lar, ilişkili veri ekranları.
İhtiyacın olan veriyi seç. Tek sorguda kontrollü veri al.
WebSocket
Canlı sohbet, borsa ekranı, maç skoru, oyun, anlık bildirim, araç takip sistemi.
Bağlantı açık kalsın, veri canlı gelsin.

Gerçek Senaryoda Hangisi Kullanılır?

Teoriyi anlamak güzel ama asıl öğrenme gerçek senaryolarla olur. Aşağıdaki tablo, farklı yazılım ihtiyaçlarında hangi API yaklaşımının daha uygun olabileceğini gösterir.

Senaryo
Uygun yaklaşım
Neden?
Blog yazılarını listeleme
REST
Basit listeleme işlemi için sade endpoint mantığı yeterlidir.
Haber sitesinden kategoriye göre içerik çekme
REST
Kategori, sayfalama ve filtreleme REST endpoint’leriyle kolay yönetilir.
Kullanıcı profilinde sadece gerekli alanları çekme
GraphQL
İstemci hangi alanları istiyorsa onları sorguda belirtebilir.
Büyük panelde kullanıcı, sipariş, stok ve raporları tek ekranda gösterme
GraphQL
Birden fazla ilişkili veri parçası kontrollü şekilde tek sorguda alınabilir.
Canlı döviz, borsa veya kripto fiyatı gösterme
WebSocket
Fiyatlar sürekli değiştiği için anlık veri akışı gerekir.
WhatsApp benzeri mesajlaşma
WebSocket
Yeni mesajların kullanıcıya anında düşmesi gerekir.
Mobil uygulamadan sipariş oluşturma
REST
Net bir işlem vardır: sipariş bilgisi gönderilir, sonuç alınır.
Canlı maç skoru veya araç takip sistemi
WebSocket
Konum, skor veya olay bilgisi anlık değişir ve canlı iletilmelidir.

Bir Uygulamada Üçü Birden Kullanılabilir mi?

Evet, kullanılabilir. Hatta modern uygulamalarda bu oldukça normaldir. Bir sistemde REST, GraphQL ve WebSocket aynı anda farklı görevler üstlenebilir. Önemli olan her işi doğru yaklaşımla çözmektir.

Örneğin bir stok takip ve bayi portalı düşünelim. Ürün listeleme, sipariş oluşturma ve kullanıcı girişi REST ile yapılabilir. Yönetim panelinde kullanıcı, stok, sipariş ve rapor özetleri GraphQL ile tek sorguda çekilebilir. Kritik stok değişiklikleri veya canlı sipariş bildirimleri ise WebSocket ile anlık gösterilebilir.

Aynı sistemde farklı API yaklaşımları
REST:
GET /urunler
POST /siparisler
PUT /kullanicilar/7

GraphQL:
query {
  dashboard {
    toplamSiparis
    kritikStoklar {
      urunAdi
      kalanAdet
    }
    sonHareketler {
      tarih
      aciklama
    }
  }
}

WebSocket:
Yeni sipariş geldiğinde panel ekranına anlık bildirim gönder.
Pratik bakış: REST, GraphQL ve WebSocket arasında seçim yaparken “hangisi daha modern?” diye değil, “bu ekranda veri nasıl akmalı?” diye düşünmek gerekir.

API Cevapları Genelde JSON Döner

Modern web API’lerinde veri çoğunlukla JSON formatında taşınır. JSON hem insan tarafından okunabilir hem de JavaScript, PHP, Python, Java, C# gibi dillerde kolayca işlenebilir.

Örnek JSON cevap
{
  "id": 15,
  "baslik": "API Nedir?",
  "kategori": "Web Geliştirme",
  "yazar": {
    "ad": "Editör",
    "rol": "Teknik İçerik"
  },
  "etiketler": ["API", "REST", "GraphQL", "WebSocket"]
}

Frontend tarafı bu JSON verisini alır ve ekranda istediği tasarıma dönüştürür. API burada veri taşıma görevini üstlenir; tasarım ve kullanıcı deneyimi ise istemci tarafında şekillenir.

API Güvenliği: Anahtar, Token ve Yetki Kontrolü

API sadece veri taşımakla ilgili değildir; aynı zamanda güvenlik konusudur. Her endpoint herkese açık olmamalıdır. Bazı API’ler public olabilir; örneğin genel haber listesi veya herkese açık hava durumu verisi. Ama sipariş oluşturma, kullanıcı bilgisi, stok hareketi veya ödeme işlemi gibi alanlarda mutlaka kimlik doğrulama ve yetki kontrolü gerekir.

API güvenliğinde sık kullanılan kavramlar şunlardır: API key, access token, OAuth, JWT, rate limit, CORS, role-based authorization ve audit log. Yeni başlayan biri için ilk aşamada şunu bilmek yeterlidir: API’ye gelen her isteğin kimden geldiği, ne yapmaya yetkili olduğu ve kötüye kullanım ihtimali kontrol edilmelidir.

Güvenlik notu: API key, access token, veritabanı şifresi, özel servis anahtarı ve gizli endpoint bilgileri frontend koduna veya public repoya yazılmamalıdır. Bu bilgiler güvenli environment değişkenleri veya secret yönetimiyle saklanmalıdır.

API Tasarlarken Dikkat Edilmesi Gerekenler

İyi API sadece çalışan API değildir. Anlaşılır, tutarlı, güvenli, belgelenmiş ve sürdürülebilir API iyi API’dir. Bir API’yi sadece bugünkü ekran için değil, ileride mobil uygulama, raporlama servisi, entegrasyon veya otomasyon aracı tarafından da kullanılabilecek şekilde düşünmek gerekir.

Tutarlı isimlendirme

/users, /orders, /products gibi sade ve tutarlı endpoint adları tercih edilmelidir.

Doğru HTTP status kodları

Başarılı işlem, yetkisiz erişim, bulunamayan kayıt veya sunucu hatası doğru kodlarla ifade edilmelidir.

Versiyonlama

API değişiklikleri için /v1, /v2 gibi versiyonlama stratejileri kullanılabilir.

Dokümantasyon

Endpoint ne bekliyor, ne döndürüyor, hangi hata kodları var, örnek istek nasıl atılır açıkça yazılmalıdır.

Yeni Başlayan Biri Hangisini Öğrenmeli?

Net cevap: önce REST öğrenmek en mantıklı başlangıçtır. Çünkü REST, web API dünyasının temel dilidir. HTTP metotlarını, endpoint mantığını, JSON cevaplarını, status kodlarını ve istemci-sunucu ilişkisini anlamadan GraphQL veya WebSocket’e geçmek konuyu gereksiz zorlaştırabilir.

REST’i anladıktan sonra GraphQL öğrenmek çok daha kolay olur. Çünkü GraphQL’in hangi problemi çözdüğünü daha iyi fark edersin: fazla veri, eksik veri ve karmaşık ekranlar. WebSocket ise gerçek zamanlı uygulama ihtiyacı doğduğunda öğrenilmelidir. Mesajlaşma, canlı fiyat, bildirim veya takip ekranı yapmıyorsan ilk gün WebSocket’e dalmak şart değildir.

1

Önce REST

HTTP, endpoint, JSON, GET, POST, PUT, DELETE ve status kodlarını öğren.

2

Sonra GraphQL

Karmaşık veri ihtiyaçlarında istemcinin veri seçme mantığını öğren.

3

İhtiyaç olunca WebSocket

Canlı mesajlaşma, fiyat akışı, skor veya bildirim gerekiyorsa WebSocket’e geç.

Kısa Karar Rehberi

API yaklaşımı seçerken aşağıdaki sorular pratik karar vermeyi kolaylaştırır.

REST seç: Veri alma, listeleme, ekleme, güncelleme ve silme gibi klasik işlemler yapıyorsan.

GraphQL seç: Farklı tablolardan gelen ilişkili verileri esnek biçimde tek ekranda toplamak istiyorsan.

WebSocket seç: Veri anlık değişiyor ve kullanıcı bunu sayfayı yenilemeden hemen görmeli diyorsan.

Faydalı Resmi Kaynaklar

  • MDN: Introduction to web APIs — API kavramını web geliştirme açısından anlamak için iyi bir başlangıç.
  • MDN: REST — REST kavramı ve web API bağlamındaki kullanımı için sade referans.
  • MDN: HTTP request methods — GET, POST, PUT, PATCH, DELETE gibi HTTP metotlarını incelemek için resmi kaynak.
  • GraphQL Official — GraphQL’in temel mantığını ve sorgu yaklaşımını öğrenmek için resmi site.
  • MDN: WebSocket API — WebSocket ile iki yönlü canlı iletişim mantığını anlamak için resmi dokümantasyon.

Sonuç: API Türünü Değil, Veri İhtiyacını Doğru Seç

API, modern yazılım dünyasının görünmeyen bağlantı katmanıdır. Bir haber sitesi, mobil uygulama, stok takip sistemi, bayi portalı, borsa ekranı, canlı mesajlaşma uygulaması veya raporlama paneli kurduğunda arka planda mutlaka bir API mantığı çalışır.

REST, düzenli veri alışverişi için sade ve güçlüdür. GraphQL, karmaşık veri ihtiyaçlarında istemciye esneklik sağlar. WebSocket ise anlık iletişim gereken yerlerde devreye girer. Bu yüzden bu üç yaklaşımı “hangisi daha iyi?” diye değil, “benim veri akışım nasıl olmalı?” diye değerlendirmek gerekir.

Yeni başlayan biri için en doğru yol REST ile sağlam temel atmaktır. REST’i iyi anlayan biri GraphQL’in neden ortaya çıktığını, WebSocket’in hangi problemi çözdüğünü ve modern web uygulamalarında verinin nasıl taşındığını çok daha net kavrar.

API dünyasının ana mesajı basit: Uygulamalar konuşur. İyi API ise bu konuşmayı güvenli, anlaşılır, hızlı ve sürdürülebilir hale getirir.