REST API mi GraphQL mi sorusunun kısa cevabı: çoğu işletme projesinde doğru başlangıç REST'tir. REST basit, önbelleğe alınması kolay ve her entegrasyon ortağının tanıdığı bir standarttır. GraphQL ise aynı veriyi çok farklı ekranların farklı biçimlerde istediği, istemci sayısının arttığı ürünlerde fark yaratır. Seçim teknolojinin modasına göre değil, veriyi kimin ve nasıl tükettiğine göre yapılmalıdır.
REST API ve GraphQL arasındaki temel fark
REST'te her kaynak kendi adresine sahiptir: /siparisler, /siparisler/42, /musteriler/7. Sunucu her adres için yanıtın biçimini belirler. GraphQL'de tek bir adres vardır ve istemci hangi alanları istediğini sorgunun içinde yazar. Yani REST'te sözleşmeyi sunucu, GraphQL'de istemci şekillendirir.
# REST: iki istek, gereğinden fazla alan
# GET /siparisler/42
# GET /musteriler/7
# GraphQL: tek istek, yalnızca gereken alanlar
query {
siparis(id: 42) {
tutar
durum
musteri { ad telefon }
}
}- REST: kaynak başına adres, HTTP metotları (GET, POST, PUT, DELETE), HTTP durum kodları ile hata bildirimi.
- GraphQL: tek adres, tipli şema, istemcinin seçtiği alanlar; hatalar çoğu zaman 200 yanıtının içinde döner.
- REST'te sürümleme genellikle /v1, /v2 ile yapılır; GraphQL'de alanlar eklenir, eskiler kullanımdan kaldırıldı olarak işaretlenir.
GraphQL ne zaman gerçekten işe yarar?
GraphQL'in çözdüğü sorun, bir ekranın ihtiyacı olan veriyi toplamak için beş ayrı istek atmak ya da her istekte kullanılmayan onlarca alanı indirmektir. Bu sorun en çok, aynı arka ucu web paneli, iOS, Android ve iş ortaklarının birlikte kullandığı ürünlerde ortaya çıkar.
- Birden fazla istemci (web, mobil, bayi paneli) aynı veriyi farklı ayrıntıda istiyorsa.
- Ekranlar sık değişiyor ve her değişiklikte arka uca yeni bir uç nokta eklemek ekibi yavaşlatıyorsa.
- Veri ilişkisel ve derinse: sipariş → kalemler → ürün → stok gibi zincirler tek ekranda gösteriliyorsa.
- Mobil tarafta zayıf bağlantıda istek sayısını azaltmak önemliyse; bu konu mobil uygulama projelerinde sık çıkar.
GraphQL bir performans aracı değil, bir koordinasyon aracıdır: istemci ekiplerinin arka uçtan her seferinde yeni uç nokta beklemesini ortadan kaldırır. Tek istemcili bir projede bu kazanç çoğu zaman yoktur.
REST neden hâlâ varsayılan seçim?
REST'in en büyük avantajı sıradanlığıdır. Muhasebe programları, kargo firmaları, ödeme sağlayıcıları ve pazaryerleri neredeyse her zaman REST sunar; bu entegrasyonları anlattığımız API entegrasyonu nedir yazısındaki örneklerin tamamı REST'tir. Dışarıya açılan bir API'yi REST olarak tasarlamak, entegrasyon ortağının ilk gün çalışmaya başlaması demektir.
- HTTP önbelleği doğal çalışır: GET yanıtları CDN ve tarayıcı tarafından saklanabilir. GraphQL'de sorgular genellikle POST ile gittiği için önbelleği ayrıca kurmak gerekir.
- Yetkilendirme ve hız sınırı uç nokta bazında tanımlanır, denetlemesi kolaydır.
- İzleme ve log okuma basittir: hangi adresin yavaşladığı hemen görülür.
- Ekipte ve piyasada REST bilen geliştirici bulmak kolaydır.
GraphQL'in gizli maliyetleri
GraphQL esneklik verirken sorumluluğu sunucuya taşır. İstemci istediği derinlikte sorgu yazabildiği için kontrolsüz bir sorgu veritabanını yorabilir. Bu yüzden GraphQL projesinde baştan planlanması gereken işler vardır:
- Sorgu derinliği ve karmaşıklık sınırı; aksi hâlde tek istek sunucuyu kilitleyebilir.
- N+1 sorgu sorununa karşı toplu yükleme (DataLoader benzeri) katmanı.
- Alan bazında yetkilendirme: kullanıcı siparişi görebilir ama maliyet alanını göremeyebilir.
- Üretimde şema keşfinin (introspection) kapatılması ve izin verilen sorgu listesi.
Bu maddeler web sitesi güvenliği kontrollerine ek olarak gelir ve ilk sürümün süresini uzatır.
İkisini birlikte kullanmak mümkün mü?
Evet ve çoğu büyüyen üründe olan budur. Dış entegrasyonlar ve webhook'lar REST olarak kalır, kendi web ve mobil istemcileriniz için bir GraphQL katmanı eklenir. Bu katman arkadaki REST servislerini veya modülleri birleştirir. Mikroservis mi monolit mi yazısında anlattığımız modüler monolitte bu geçiş kademeli yapılabilir; mevcut uç noktaları bozmadan başlar.
Karar için kısa kontrol listesi
- API'yi dış firmalar mı kullanacak? Evet ise REST.
- Tek web paneli veya tek mobil uygulama mı var? REST yeterli.
- Üç veya daha fazla farklı istemci aynı veriyi farklı biçimde mi istiyor? GraphQL'i değerlendirin.
- Ekipte GraphQL şeması, yetkilendirme ve sorgu sınırı kurabilecek deneyim var mı? Yoksa REST ile başlayın.
- CDN önbelleği kritik mi (herkese açık katalog, içerik)? REST daha az iş çıkarır.
Sonuç
REST mi GraphQL mi sorusunda kazanan teknoloji değil, projeye uyan sözleşmedir. Dışarıya açılan ve tek istemcili sistemlerde REST sade ve güvenli bir başlangıçtır; çok istemcili, ekranları hızla değişen ürünlerde GraphQL ekiplerin birbirini beklemesini azaltır. Projenizin hangisine ihtiyaç duyduğunu birlikte netleştirmek için özel yazılım hizmetimize göz atabilir ya da teklif alabilirsiniz.