# gRPC vs GraphQL

Adres: https://softwaredictionary.org/tr/karsilastirma/grpc-vs-graphql
Son güncelleme: 2026-10-06

Kısaca: gRPC, tipli uzak metotları HTTP/2 üzerinden ikili Protobuf mesajlarıyla çağırır; GraphQL'de ise istemci tek endpoint'ten tam istediği JSON alanlarını sorgular.

## gRPC ile GraphQL arasındaki fark nedir?

gRPC bir uzak yordam çağrısı (RPC) framework'üdür: servisleri ve metotları bir `.proto` dosyasında tanımlar, istemci ve sunucu kodunu üretir ve uzak metotları yerel fonksiyonlarmış gibi çağırırsınız; mesajlar HTTP/2 üzerinden ikili Protocol Buffers olarak kodlanır. GraphQL ise API'ler için bir sorgu dilidir: sunucu tipli bir şema yayımlar, her istemci de tam olarak istediği alanları adlandıran bir sorgu gönderir; bu genellikle tek bir endpoint'e HTTP üzerinden JSON olarak yapılır.

Farklı çağıranlar için tasarlanmışlardır. gRPC, backend servisleri arasında hızlı ve katı bir iletişimi hedefler: kompakt mesajlar, pek çok dilde üretilmiş tipler, son tarihler (deadline) ve tek ya da iki yönde akış. GraphQL ise kullanıcı arayüzleri için esnek veri çekmeyi hedefler: bir web ya da mobil ekran, birkaç kaynaktan iç içe veriyi tek istekte toplayabilir ve yalnızca gösterdiği alanları alır.

Yani gRPC'de yanıtın biçimini sunucunun mesaj tipleri belirler, GraphQL'de ise istemci seçer. Bu da gRPC'yi öngörülebilir ve verimli ama katı; GraphQL'i ise esnek ama önbelleğe alınması, hız sınırı konulması ve pahalı sorgulara karşı korunması daha zor kılar. Tarayıcılar gRPC'yi doğrudan çağıramaz, gRPC-Web'e ya da bir proxy'ye ihtiyaç duyar; GraphQL ise herhangi bir HTTP istemcisinden çalışır.

Pek çok sistem ikisini birlikte kullanır: mikroservisler birbiriyle gRPC üzerinden konuşur, önlerindeki bir GraphQL ağ geçidi de tarayıcılara ve mobil uygulamalara hizmet verir; bu ağ geçidinin resolver'ları gRPC servislerini çağırır. Sık yapılan bir yanlış, GraphQL'in bir veritabanı ya da daha hızlı bir taşıma yöntemi olduğunu düşünmektir; o bir API katmanıdır ve hızı arkasındaki resolver'lara bağlıdır.

| Özellik | gRPC | GraphQL |
| --- | --- | --- |
| Tarz | Uzak yordam çağrıları: tipli mesajlar alan metotlar | Tipli bir veri grafiği üzerinde sorgular |
| Sözleşme | Protocol Buffers ile yazılan `.proto` dosyaları | GraphQL şema dilinde yazılmış bir şema |
| Yanıtın biçimi | Metodun mesaj tipiyle sabittir | İstemci tarafından, alan alan seçilir |
| Kodlama | İkili Protocol Buffers | JSON |
| Taşıma | HTTP/2; tek ya da iki yönde akışla | Genellikle tek bir endpoint'e HTTP `POST`; güncellemeler için subscription'lar |
| Tarayıcı desteği | gRPC-Web ya da bir proxy gerekir | Herhangi bir HTTP istemcisiyle çalışır |
| En uygun olduğu yer | Servisler arası çağrılar, yüksek hacim, akış | Esnek, iç içe veriye ihtiyaç duyan ön yüzler |

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

- Backend servisleri birbirini yüksek hacimde çağırıyor ve düşük gecikmeye ihtiyaç duyuyor.
- Katı sözleşmeler ve birkaç dilde üretilmiş istemciler istiyorsunuz.
- Tek ya da iki yönde akışa ihtiyacınız var.

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

- Web ve mobil istemcilerin aynı verinin farklı dilimlerine ihtiyacı var.
- Tek bir ekran, birkaç servisten ya da veritabanından gelen iç içe veriyi birleştiriyor.
- Ön yüz ekipleri, yeni endpoint'leri beklemeden ne çektiklerini değiştirebilmeli.

## Sık sorulan sorular

**gRPC, GraphQL'den daha mı hızlı?**

Ham servisler arası çağrılarda genellikle evet; çünkü ikili Protobuf mesajları JSON'dan küçüktür ve daha hızlı ayrıştırılır, HTTP/2 de pek çok çağrıyı tek bağlantıda taşır. GraphQL ise birkaç gidiş-dönüşü tek bir sorguyla değiştirerek ön yüzlere yine de zaman kazandırabilir.

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

Evet. Yaygın bir tasarım, gRPC mikroservislerinin önüne bir GraphQL ağ geçidi koymaktır: istemciler ağ geçidini sorgular, onun resolver'ları da servisleri çağırır.

**Bir tarayıcı gRPC API'sini çağırabilir mi?**

Doğrudan çağıramaz. Tarayıcılar genellikle çağrıları çeviren bir proxy aracılığıyla gRPC-Web kullanır ya da gRPC servislerinin önünde duran bir REST veya GraphQL API'siyle konuşur.

---

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