
Hızlı İletişim: gRPC API
Mikroservis mimarilerinde servisler arası iletişimde yaygın olarak gRPC kullanılır. Hızlı bir şekilde çalışması nedeniyle servisler arasında data transferi, hesaplama işlemleri hızlıca client tarafına hazırlanır. Bu yazımızda gRPC üzerine yoğunlaşacağız. “API nedir?” yazımıda birden fazla API çeşiti olduğunda bunların farklı yerlerde efektif bir şekilde kullanılması gerektiğini söylemiştik. Şimdi adım adım gRPC’yi anlamaya çalışalım.

Emre Baran Arca
21 Nis 2025
Mikroservis mimarilerinde servisler arası iletişimde yaygın olarak gRPC kullanılır. Hızlı bir şekilde çalışması nedeniyle servisler arasında data transferi, hesaplama işlemleri hızlıca client tarafına hazırlanır. Bu yazımızda gRPC üzerine yoğunlaşacağız.
“API nedir?” yazımıda birden fazla API çeşiti olduğunda bunların farklı yerlerde efektif bir şekilde kullanılması gerektiğini söylemiştik. Şimdi adım adım gRPC’yi anlamaya çalışalım.
Remote Procedure Call → Uzak sunucudaki metotları sanki kendi ortamının birer parçasıymış gibi çalıştırabilen sistemdir. Kendi ortamındaymış gibi anlamamızın nedeni hızlı biçimde gerçekleşen iletişimdir.
Ne zaman kullanılır?
Anlık response gereken işlemler (ödeme, stock kontrolü)
Client’ın işleme devam etmek için sonucu beklemesi gereken durumlar
Mikroservisler arası direct communication
gRPC, veri iletişimi için HTTP/2 protokolünü kullanır.
HTTP/2
HTTP/2 tek bir TCP bağlantısı üzerinden birden çok ve paralel request ve response yeteneği olarak yorumlanabilir. Bu duruma multiplexing denir.
HTTP/2 Client ile server arasındaki iletişim binary protokol ile gerçekleştirilir.
HTTP/2 de her request’in header’ı HPACK ile sıkıştırılarak gönderilmektedir.(Header Compression)
Bir request’e karşılık birden fazla response alınabilir. (Server Push)
C++, Java, Python, Go, C#, JavaScript, Ruby, Dart, Kotlin ve daha birçok dilde resmi desteği vardır. .proto dosyasından hedef dilin kodunu otomatik üretebilirsiniz.
Nerelerde gRPC kullanmalıyız?
Microservices mimarisinde servisler arasındaki iletişimde kullanılır.
IoT teknolojilerinde kullanılır.
Nerelerde gRPC kullanmamalıyız?
Public API’lar: Dış dünyaya açacağınız API’larda, client’ların gRPC’yi destekleme zorunluluğu karmaşıklık yaratabilir. REST veya GraphQL daha uygun olabilir.
Basit, Hızlı Prototipler: Küçük bir proje veya prototip için gRPC’nin kurulum ve konfigürasyon maliyeti, sağladığı faydadan daha yüksek olabilir.
gRPC dezavantajları nelerdir?
İnsan-Tarafından Okunabilirlik (Debug): Protobuf mesajları binary’dir. HTTP/1.1 ve JSON’daki gibi bir tarayıcıdan veya curl ile kolayca test edilemez. Debug için genellikle ek araçlara (gRPCurl, BloomRPC) ihtiyaç duyulur.
Browser Desteği: Doğrudan bir web tarayıcısından gRPC call atmak sınırlıdır. Web client’ları için gRPC-Web kullanılması gerekir, bu da bazı kısıtlamalar getirebilir (örneğin, server streaming’in sınırlı desteği).
Yüksek Öğrenme Eğrisi: REST’e kıyasla daha karmaşık bir konsept ve tooling gerektirir.
Protocol Buffers(Protobuf) nedir?
Protobuf; servislerin birbirleriyle “aynı dili” konuşmasını garanti altına alan katı ama çok verimli bir kural kitabıdır.
Proto Dosyası → Veri serileştirme ve iletişim protokolünde ortak anlaşmayı sağlayan tanımlayıcı bir dosyadır.
gRPC İletişim Türleri
Unary → Tek bir istek ve tek bir yanıtın döndüğü iletişimdir.Restful gibi
Server Streaming →Client bir istek atar server birden fazla yanıt gönderir. (stream döner)
Client Streaming → Client birden fazla stream data gönderir, server tek response gönderir.
Bi-directional Streaming → Client server’a veya server client’a birden çok mesaj transferi sağlayabilir.
gRPC yaşam döngüsü
Başlatma: İstemci, sunucuya bir çağrı başlatmak istediğini söyler ve varsa kimlik bilgileri, zaman aşımı süresi gibi “meta verileri” gönderir.
Mesajlaşma: Seçilen iletişim türüne göre (Unary, Streaming vb.) istemci ve sunucu arasında Protobuf mesajları gidip gelir.
Sonlandırma: Çağrı bittiğinde (ya iş tamamlandığı için ya da bir hata olduğu için), sunucu bir “durum kodu” (status code) ve bir “durum mesajı” (status message) ile çağrının nasıl bittiğini istemciye bildirir.
Pratik Uygulama
gRPC uygulamalarında ilk yapılması gereken proto dosyasını hazırlamaktır. Proto, dil tarafından desteklenen proto compiler tarafından compile edildikten sonra proto kurallarına uygun gerekli arayüzleri oluşturan, otomatik generate eden bir yapılanmadır.
Mikroservis mimarisinde indirim ve ürün olmak üzere iki farklı servis oluşturalım. Kategorilere göre indirim kodları tanımlanıyor ve indirim kodu geçerli ise ürünün fiyatında indirim gerçekleşiyor. İşte buradaki ürün servisi, indirim servisi ile grpc üzerinden iletişim kuracak. Böylelikle daha hızlı bir veri iletişimi olacak.
Bu proto dosyası ile ilgili classları otomatik generate edecek.
Projenin github linki:



