Skip to main content
Web Geliştirme

GraphQL Nedir? REST API ile Karşılaştırma

Mart 15, 2026 4 dk okuma 12 views Raw
GraphQL API sorgu yapısı ve kod görseli
İçindekiler

GraphQL Nedir?

GraphQL, Facebook (Meta) tarafından 2015'te açık kaynak olarak yayınlanan bir API sorgu dili ve çalışma zamanıdır. İstemcinin tam olarak ihtiyaç duyduğu veriyi tek bir istekle sorgulamasına olanak tanır. REST API'lerdeki fazla veri (over-fetching) ve eksik veri (under-fetching) sorunlarını çözmek amacıyla tasarlanmıştır.

GraphQL, bir veritabanı değildir; herhangi bir veri kaynağının önüne yerleştirilebilen bir API katmanıdır. GitHub, Shopify, Twitter ve Netflix gibi büyük şirketler GraphQL kullanmaktadır.

GraphQL Temel Kavramları

Schema (Şema)

GraphQL şeması, API'nin tüm yapısını tanımlar. Hangi verilerin sorgulanabileceği, hangi işlemlerin yapılabileceği ve veri tiplerinin yapısı şemada belirtilir. Şema, API'nin sözleşmesi gibi çalışır ve istemci ile sunucu arasındaki anlaşmayı temsil eder.

Query (Sorgu)

Veri okumak için kullanılır. İstemci, tam olarak hangi alanları istediğini belirtir. Sunucu yalnızca istenen alanları döndürür, ne eksik ne fazla.

Mutation (Mutasyon)

Veri oluşturma, güncelleme ve silme işlemleri için kullanılır. REST'teki POST, PUT ve DELETE işlemlerinin karşılığıdır.

Subscription (Abonelik)

Gerçek zamanlı veri güncellemeleri için kullanılır. WebSocket üzerinden çalışır ve sunucudaki değişiklikler anında istemciye iletilir.

Resolver'lar

Şemadaki her alan için veriyi nasıl getirileceğini tanımlayan fonksiyonlardır. Veritabanı sorguları, harici API çağrıları veya hesaplamalar resolver'larda gerçekleşir.

GraphQL vs REST: Detaylı Karşılaştırma

ÖzellikRESTGraphQL
Endpoint YapısıKaynak başına ayrı endpointTek bir endpoint
Veri KontrolüSunucu belirlerİstemci belirler
Over-fetchingYaygın sorunÇözülmüş
Under-fetchingBirden fazla istek gerekebilirTek istekte iç içe sorgular
Versiyon YönetimiURL versiyonlama (v1, v2)Versiyonlama gereksiz
ÖnbelleklemeHTTP önbellekleme kolayÖzel çözümler gerekir
Dosya YüklemeDoğal destekEk kütüphane gerekir
Hata YönetimiHTTP durum kodlarıHer zaman 200, hatalar body'de

GraphQL'in Avantajları

Tam Veri Kontrolü

İstemci, yalnızca ihtiyaç duyduğu alanları isteyerek bant genişliğini optimize eder. Özellikle mobil uygulamalarda, sınırlı ağ bağlantısında bu büyük avantaj sağlar.

Tek Endpoint

Tüm işlemler tek bir endpoint üzerinden gerçekleşir. Bu, API yönetimini basitleştirir ve istemci tarafında endpoint yönetimi ihtiyacını ortadan kaldırır.

İç İçe Sorgular

İlişkili verileri tek bir istekte sorgulayabilirsiniz. Örneğin, bir kullanıcıyı, gönderilerini ve her gönderinin yorumlarını tek bir GraphQL sorgusunda çekebilirsiniz. REST'te bu, en az üç ayrı istek gerektirir.

Güçlü Tip Sistemi

GraphQL şeması, tüm API'nin yapısını açıkça tanımlar. Bu, otomatik dokümantasyon oluşturmayı, istemci kodu üretmeyi ve derleme zamanı doğrulaması yapmayı mümkün kılar.

Versiyonsuz API

Yeni alanlar eklendiğinde mevcut istemciler etkilenmez. Kullanılmayan alanlar deprecated olarak işaretlenebilir. Bu, API evrimini çok daha sorunsuz hâle getirir.

GraphQL'in Zorlukları

Karmaşık Sorgular ve Performans

Derinlemesine iç içe sorgular, sunucu tarafında N+1 sorgu problemine yol açabilir. DataLoader gibi araçlar bu sorunu çözmek için kullanılır. Sorgu derinlik sınırlaması ve karmaşıklık analizi uygulanmalıdır.

Önbellekleme Zorlukları

REST'te HTTP GET istekleri doğal olarak önbellenebilirken, GraphQL'de tüm istekler POST olarak gönderilir. Apollo Client ve Relay gibi istemci kütüphaneleri, istemci tarafında önbellekleme çözümleri sunar.

Dosya Yükleme

GraphQL spesifikasyonu dosya yüklemeyi doğrudan desteklemez. graphql-upload gibi ek kütüphaneler veya ayrı bir REST endpoint'i gerekir.

Öğrenme Eğrisi

GraphQL'in şema tasarımı, resolver yazımı ve istemci kütüphaneleri öğrenmek, özellikle REST'e alışkın ekipler için zaman alabilir.

GraphQL Araçları ve Kütüphaneleri

Sunucu Tarafı

  • Apollo Server: En popüler GraphQL sunucu kütüphanesi
  • GraphQL Yoga: Basit ve performanslı alternatif
  • Hot Chocolate (.NET): C#/.NET için GraphQL sunucusu
  • Strawberry (Python): Python için modern GraphQL kütüphanesi

İstemci Tarafı

  • Apollo Client: React, Vue ve Angular için kapsamlı istemci
  • Relay: Meta'nın React için geliştirdiği GraphQL istemcisi
  • urql: Hafif ve esnek GraphQL istemcisi

Geliştirme Araçları

  • GraphiQL: Tarayıcı içi interaktif GraphQL editörü
  • Apollo Studio: GraphQL API izleme ve analiz platformu
  • GraphQL Code Generator: Şemadan otomatik tip ve kod üretimi

Ne Zaman GraphQL, Ne Zaman REST?

GraphQL'i Tercih Edin

  1. Birden fazla istemci (web, mobil, IoT) farklı veri ihtiyaçlarına sahipse
  2. İlişkili verilerin sık sorgulandığı uygulamalarda
  3. Hızlı iterasyon ve frontend bağımsızlığı isteniyorsa
  4. Gerçek zamanlı veri güncellemeleri gerekiyorsa

REST'i Tercih Edin

  1. Basit CRUD operasyonları için
  2. Dosya yükleme/indirme yoğun uygulamalarda
  3. HTTP önbelleklemenin kritik olduğu senaryolarda
  4. Ekibin REST deneyimi güçlü ve GraphQL deneyimi sınırlıysa

Ekolsoft, projelerin gereksinimlerine göre GraphQL veya REST API tercihini yaparak müşterilerine en uygun çözümü sunmaktadır.

Sonuç

GraphQL, modern API geliştirmede güçlü bir alternatif sunan, istemci odaklı bir sorgu dilidir. REST'in yerini almak için değil, belirli senaryolarda daha iyi bir deneyim sunmak için tasarlanmıştır. Her iki yaklaşımın güçlü ve zayıf yönlerini anlayarak, projeniz için doğru seçimi yapabilirsiniz.

Bu yazıyı paylaş