# REST vs GraphQL

Adres: https://softwaredictionary.org/tr/karsilastirma/rest-vs-graphql
Son güncelleme: 2026-09-30

Kısaca: REST, her biri sabit biçimde veri döndüren birçok URL sunar; GraphQL ise istemcinin tam olarak ihtiyaç duyduğu alanları istediği tek bir endpoint sunar.

## REST ile GraphQL arasındaki fark nedir?

REST, her kaynağın (bir kullanıcı ya da sipariş gibi) kendi URL'sine sahip olduğu ve `GET` ile `POST` gibi standart HTTP metotlarıyla okunup değiştirildiği bir web API mimari tarzıdır. GraphQL ise API'ler için bir sorgu dili ve çalışma ortamıdır: sunucu tipli bir şema yayımlar, istemciler de istedikleri verinin tam tarifini içeren sorgular gönderir.

Temel fark, yanıtın biçimine kimin karar verdiğidir. REST'te her uç noktanın ne döndüreceğini sunucu belirler; bu yüzden bir ekran birkaç istek gerektirebilir ya da hiç kullanmadığı alanları alabilir, buna eksik çekme (under-fetching) ve fazla çekme (over-fetching) denir. GraphQL'de alanları istemci seçer ve ilişkileri tek istekte izleyebilir; bu yüzden birçok farklı ekranı ve istemcisi olan uygulamalarda popüler oldu.

Birbirlerini dışlamazlar. İkisi de genellikle HTTP üzerinde çalışır ve `JSON` döndürür; birçok ekip basit genel ya da servisler arası API'ler için REST'i korurken, ön yüzleri için birkaç arka ucun önüne bir GraphQL katmanı koyar. GraphQL işin bir kısmını sunucuya kaydırır: resolver'ların N+1 sorgu sorunundan kaçınması gerekir, önbellekleme ve hız sınırlama da düz URL'lere göre daha fazla düşünmeyi gerektirir.

Sık yapılan bir yanlış, GraphQL'in REST'in yerini aldığı ya da her zaman daha hızlı olduğu düşüncesidir. İç içe karmaşık veriler için gidiş-dönüşleri azaltır; ama basit CRUD API'lerinde REST'i kurmak, önbelleğe almak ve hatasını ayıklamak çoğu zaman daha kolaydır ve tek bir pahalı GraphQL sorgusu birkaç küçük REST çağrısından daha yavaş olabilir.

| Özellik | REST API | GraphQL |
| --- | --- | --- |
| Uç noktalar | Kaynak başına bir tane, /users/42 gibi birçok URL | Tüm işlemler için genellikle /graphql gibi tek bir URL |
| Yanıt biçimi | Her uç nokta için sunucu tarafından sabitlenir | İstemci tarafından, alan alan seçilir |
| İlişkili veri | Çoğu zaman birkaç istek gerektirir | Tek bir sorgu iç içe ilişkileri izleyebilir |
| Önbellekleme | URL'ye göre standart HTTP önbellekleme ile kolay | İstemci tarafı önbellekler ya da kalıcı sorgular gerekir |
| Tipleme | İsteğe bağlı; çoğunlukla OpenAPI ile belgelenir | Katı tipli yerleşik şema |
| Hatalar | 404 gibi HTTP durum kodlarıyla bildirilir | Çoğu zaman gövdede bir errors dizisiyle birlikte 200 OK |
| En uygun olduğu yer | Basit, önbelleğe alınabilir genel ya da servisler arası API'ler | Birçok kaynaktan veriyi birleştiren zengin ön yüzler |

## REST API şu durumlarda doğru seçim

- API'niz iyi tanımlanmış kaynaklar üzerinde basit CRUD işlemlerinden oluşuyor.
- HTTP önbellekleme, CDN'ler ve durum kodlarının kutudan çıktığı gibi çalışmasını istiyorsunuz.
- API herkese açık ve düz HTTP araçlarıyla kolayca çağrılabilmeli.
- Servisler kararlı, öngörülebilir veri yükleri (payload) alışverişi yapıyor.

## GraphQL şu durumlarda doğru seçim

- Birçok istemcinin ya da ekranın aynı verinin farklı dilimlerine ihtiyacı var.
- Bir görünüm, birkaç REST çağrısı gerektirecek iç içe, ilişkili veriye ihtiyaç duyuyor.
- Ön yüzlerin keşfedip doğrulayabileceği güçlü tipli bir şema istiyorsunuz.
- Birkaç arka uç servisinin önüne tek bir API koyuyorsunuz.

## Sık sorulan sorular

**GraphQL, REST'ten daha mı hızlı?**

Kendiliğinden değil. GraphQL iç içe veriler için gidiş-dönüş sayısını azaltabilir; ama her sorgu sunucuya daha pahalıya gelebilir ve REST yanıtlarını önbelleğe almak daha kolaydır.

**REST ve GraphQL birlikte kullanılabilir mi?**

Evet. Yaygın bir kurulumda mevcut REST servisleri korunur ve onları çağıran bir GraphQL katmanı eklenir; böylece arka uçlar değişmeden kalırken ön yüzler tek ve esnek bir API elde eder.

**GraphQL özel bir veritabanı gerektirir mi?**

Hayır. GraphQL yalnızca bir API katmanıdır; resolver'ları herhangi bir veritabanından, REST API'sinden ya da başka bir servisten okuyabilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
