GRPC Nedir?

gRPC Google tarafından geliştirilmiş, açık kaynaklı Remote Procedure Call (RPC) protokülünü kullanan bir frameworktür. gRPC Google tarafından uzun süre kullanılmış, daha sonra Cloud Native Computing Foundation (CNCF) ekosisteminin bir parçası haline gelip, açık kaynaklı bir şekilde topluluğa sunulmuştur.
RPC, sunucu tarafındaki methodları sanki istemci tarafındaymış gibi kullanmamızı sağlayan bir iletişim aracıdır.
RPC çok önceden kullanılan bir teknolojidir. gRPC'nin RPC'den farkı HTTP 2.0 nimetlerinden yararlanmamızı ve dilden bağımsız bir şekilde çalışmamızı sağlamasıdır. gRPC, sunucu ve istemci arasındaki .proto (ProtoBuf) dosyalarıyla iletişim kurmaktadır.
Protocol Buffer (ProtoBuf) Nedir?

Google tarafından sıkça kullanılan, XML ve JSON serialization'a göre performansı çok yüksek olan Binary serialization yapan bir haberleşme protokülüdür.
gRPC’nin başlıca avantajları:
- Yüksek performans
- Dil bağımsız
- Bi-directional Streaming (Çift yönlü haberleşme)
- HTTP 2.0 ve Binary serialization ile birlikte daha az ağ trafiği
- Mikroservis mimarilerde kullanışlı olması
gRPC’nin dezavantajları:
- Tarayıcı desteğinin az olması (gRPC-Web kullanılmaz ise)
- Binary serialization kullanıldığından verilerin okunabilirliği zor
gRPC Mimarisi ve Yaşam Döngüsü
gRPC Interface Definition Language (IDL) arayüz tanımlama dili sayesinden aşağıdaki gibi .proto dosyaları aracılığıyla arayüz, kontrat ve methodları başka bir dil (C#, C, C++, Go, Java, Kotlin, Node.js, Php vs.) kullansak bile hem sunucu hemde istemci tarafından otomatik olarak oluşturur.
hello.proto Dosyası
syntax = "proto3";
option csharp_namespace = "AspNetGrpc.V1.Unary";
package Hello;
service Hello {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
RPC Yaşam Döngüleri

İstemcinin tek bir request yaptığı ve tek bir response aldığı basit bir RPC türüdür.
İstemci tarafından istek başlatılır, sunucu tarafından istemciye doğru bir ileti akışı başlar. (Örnek: Sunucu'dan dosya indirme)
İstemci tarafından çoklu bir iletişim akışının başladığı sunucu tarafından tek bir cevabın döndürüldüğü bir RPC türüdür. (Örnek: Sunucuya dosya yükleme)
-
Bidirectional streaming RPC
Hem istemci hemde sunucu tarafından bir ileti akışının başladığı bir RPC türüdür.
gRPC yaşam döngüleri ve dosya yükleme ile ilgili projeleri github üzerinden indirmek veya görüntülemek için https://github.com/ayzdru/AspNetGrpcLifeCycles, https://github.com/ayzdru/AspNetGrpcFileStreaming adreslerine gidebilirsiniz.
BONUS: