← Back to Blog
MIMARI

REST vs gRPC vs GraphQL

F. Çağrı BilgehanJanuary 25, 202611 min read
restgrpcgraphqlapi

REST vs gRPC vs GraphQL: API İletişim Protokolleri Karşılaştırması

Backend servisleri arasında ya da istemci ile backend arasında veri alışverişi yapmanın birden fazla yolu vardır. En popüler üçü: REST, gRPC ve GraphQL. Hangisi en iyisi? Cevap: "Duruma bağlı."

REST (Representational State Transfer)

REST, HTTP üzerinden kaynak tabanlı (resource-based) iletişim sağlar. 2000'li yıllardan beri web'in standart API yaklaşımıdır.

Nasıl Çalışır?

GET    /api/users          → Tüm kullanıcıları listele
GET    /api/users/42       → ID=42 kullanıcıyı getir
POST   /api/users          → Yeni kullanıcı oluştur
PUT    /api/users/42       → Kullanıcıyı güncelle
DELETE /api/users/42       → Kullanıcıyı sil

Avantajlar

  • Basit ve yaygın
  • HTTP standartlarına uygun
  • Cache mekanizması dahili
  • Tüm dil ve platformlar destekler

Dezavantajlar

  • Over-fetching: İhtiyacından fazla veri çekme
  • Under-fetching: Birden fazla istek gerekebilir
  • Versiyon yönetimi karmaşıklaşabilir

gRPC (Google Remote Procedure Call)

Google tarafından geliştirilen, Protocol Buffers (protobuf) tabanlı yüksek performanslı RPC framework'ü.

Nasıl Çalışır?

// user.proto
service UserService {
  rpc GetUser (UserRequest) returns (UserResponse);
  rpc ListUsers (Empty) returns (stream UserResponse);
}

message UserRequest {
  int32 id = 1;
}

message UserResponse {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

Avantajlar

  • Çok yüksek performans — Binary serialization
  • HTTP/2 üzerinde çalışır (multiplexing, streaming)
  • Tip güvenliği (strongly typed)
  • Bi-directional streaming desteği
  • Otomatik kod üretimi (code generation)

Dezavantajlar

  • Tarayıcı desteği sınırlı
  • Debugging zor (binary format)
  • Öğrenme eğrisi daha yüksek

GraphQL

Facebook tarafından geliştirilen, istemcinin ihtiyaç duyduğu veriyi tam olarak isteyebildiği sorgu dili.

Nasıl Çalışır?

# İstemci tam olarak istediği alanları belirtir
query {
  user(id: 42) {
    name
    email
    posts(limit: 5) {
      title
      createdAt
    }
  }
}

Avantajlar

  • Tam veri kontrolü — Over/under-fetching yok
  • Tek endpoint (/graphql)
  • Güçlü tip sistemi ve introspection
  • İlişkisel veriler için ideal

Dezavantajlar

  • Caching karmaşık (POST istekleri)
  • N+1 sorgu problemi
  • Dosya upload/download karmaşık
  • Basit CRUD için fazla karmaşık

Karşılaştırma Tablosu

| Özellik | REST | gRPC | GraphQL | |---------|------|------|---------| | Protokol | HTTP/1.1 | HTTP/2 | HTTP/1.1 | | Veri formatı | JSON | Protobuf (binary) | JSON | | Performans | Orta | Çok yüksek | Orta | | Öğrenme eğrisi | Düşük | Yüksek | Orta | | Tarayıcı desteği | ✅ Tam | ⚠️ Sınırlı | ✅ Tam | | Streaming | ❌ | ✅ | ⚠️ Subscription | | Caching | ✅ Kolay | ❌ Zor | ⚠️ Karmaşık | | Tip güvenliği | ❌ | ✅ | ✅ | | Dosya transfer | ✅ Kolay | ⚠️ | ⚠️ |

Hangisini Ne Zaman Kullanmalı?

REST Kullanın

  • Public API'ler
  • Basit CRUD operasyonları
  • Caching önemli
  • Geniş ekosistem gerekli

gRPC Kullanın

  • Mikroservisler arası iletişim
  • Yüksek performans gerekli
  • Real-time streaming
  • Dahili servis iletişimi

GraphQL Kullanın

  • Karmaşık ilişkisel veriler
  • Mobil uygulamalar (bant genişliği tasarrufu)
  • Farklı istemciler farklı veri istiyor
  • Hızlı prototipleme

Hybrid Yaklaşım

Gerçek dünyada çoğu zaman birden fazla protokol birlikte kullanılır:

İstemci (Web/Mobil) ←→ GraphQL/REST ←→ API Gateway
                                            ↓
Servis A ←→ gRPC ←→ Servis B
Servis C ←→ gRPC ←→ Servis D

Sonuç

Tek bir "en iyi" protokol yoktur. REST, basitlik ve yaygınlık istiyorsanız; gRPC, performance-critical servisler arası iletişim için; GraphQL ise karmaşık frontend ihtiyaçları için idealdir.

API tasarımı ve mikroservis iletişim kalıplarını Yazılım Mimarisi 3.0 kitabında derinlemesine inceliyoruz.

Related Posts

Message Queue Nedir?

Message Queue nedir ve neden kullanılır?

Yazılım Mimarisi Nedir? Temelden İleri Seviyeye Kapsamlı Rehber

Yazılım mimarisi nedir, neden önemlidir ve nasıl öğrenilir?