API'lerinizin performansını ve güvenilirliğini artırmanın bir yolunu arıyorsanız, gRPC akışını kullanmayı düşünebilirsiniz. gRPC, protokol tamponlarını ve HTTP/2'yi kullanarak verimli ve ölçeklenebilir hizmetler oluşturmanıza olanak tanıyan modern, açık kaynaklı bir çerçevedir. Akış, gRPC'nin, her bir yanıtı beklemeden tek bir bağlantıda birden fazla mesaj göndermenizi ve almanızı sağlayan temel özelliklerinden biridir.
Bu blog yazısında, gRPC akışının ne olduğunu, nasıl çalıştığını ve API'leriniz için neden faydalı olduğunu açıklayacağım. Ayrıca, gRPC akış hizmetlerinizi test etmek ve hata ayıklamak için apidog adlı bir aracın nasıl kullanılacağını da göstereceğim. Bu yazının sonunda, gRPC akışı hakkında daha iyi bir anlayışa sahip olacak ve projelerinizde nasıl kullanacağınızı öğreneceksiniz.
gRPC Akışı Nedir?
gRPC akışı, temel taşıma protokolü olarak HTTP/2'yi kullanarak, tek bir bağlantıda birden fazla mesaj göndermenin ve almanın bir yoludur. HTTP/2, çoklama özelliğini destekleyen HTTP'nin daha yeni bir sürümüdür; bu, birden fazla isteğin ve yanıtın, birbirini engellemeden aynı TCP bağlantısı üzerinden gönderilebileceği anlamına gelir. Bu, bağlantıların açılıp kapanmasının yükünü azaltır ve API'lerinizin gecikme süresini ve verimini iyileştirir.

gRPC akışı, dört tür iletişim desenini kullanmanıza olanak tanır:
- Unary: Bu, istemcinin bir istek gönderdiği ve sunucudan bir yanıt aldığı en basit ve en yaygın desendir. Bu, normal bir HTTP isteği ve yanıtına benzer.
- Sunucu akışı: Bu desende, istemci bir istek gönderir ve sunucudan birden fazla yanıt alır. Sunucu, yanıtları istemcinin talep etmesini beklemeden, kullanılabilir hale gelir gelmez akış yapabilir. Bu, sunucunun istemciye büyük miktarda veri göndermesi gerektiği veya sunucunun istemciye gerçek zamanlı güncellemeler göndermesi gerektiği senaryolar için kullanışlıdır.
- İstemci akışı: Bu desende, istemci birden fazla istek gönderir ve sunucudan bir yanıt alır. İstemci, istekleri sunucunun onaylamasını beklemeden, kullanılabilir hale gelir gelmez akış yapabilir. Bu, istemcinin sunucuya büyük miktarda veri yüklemesi gerektiği veya istemcinin tek bir istekte sunucuya birden fazla parametre göndermesi gerektiği senaryolar için kullanışlıdır.
- Çift yönlü akış: Bu desende, istemci ve sunucu her iki yönde de birden fazla mesaj gönderebilir ve alabilir. Mesajlar, katı bir sıraya uymadan, bağımsız olarak gönderilebilir ve alınabilir. Bu, istemci ve sunucunun sürekli ve dinamik bir konuşma yapması gerektiği veya istemci ve sunucunun eşler arası bir şekilde veri alışverişinde bulunması gerektiği senaryolar için kullanışlıdır.

gRPC Akışı Nasıl Çalışır?
gRPC akışı, mesajları kodlamak ve taşımak için protokol tamponlarını ve HTTP/2'yi kullanarak çalışır. Protokol tamponları, mesajlarınızın yapısını ve türlerini bir şema dosyasında tanımlamanıza olanak tanıyan ikili bir serileştirme biçimidir. Protokol tamponları kompakt, hızlı ve kullanımı kolaydır ve diller arası ve platformlar arası uyumluluğu destekler.
HTTP/2, çoklama, sıkıştırma ve şifrelemeyi destekleyen ikili bir protokoldür. HTTP/2, temel iletişim birimi olarak çerçeveleri kullanarak, aynı bağlantı üzerinden birden fazla mesaj göndermenize olanak tanır. Her çerçevenin, çerçevenin türünü, uzunluğunu ve akış kimliğini gösteren bir başlığı vardır. Akış kimliği, bir çerçeveyi belirli bir istek veya yanıtla ilişkilendiren benzersiz bir tanımlayıcıdır. HTTP/2 ayrıca, API'lerinizin güvenilirliğini ve verimliliğini sağlamaya yardımcı olan akış kontrolü ve hata işleme özelliklerini de destekler.
gRPC akışını kullanmak için, hizmetinizi ve mesajlarınızı gRPC sözdizimini kullanarak bir protokol tamponu dosyasında tanımlamanız gerekir. Örneğin, burada tek yönlü ve sunucu akışı çağrılarını destekleyen basit bir hizmet bulunmaktadır:
syntax = "proto3";
package example;
// Geçerli zamanı döndüren bir hizmet
service TimeService {
// Tek yönlü çağrı: geçerli zamanı döndürür
rpc GetTime (GetTimeRequest) returns (GetTimeResponse) {}
// Sunucu akışı çağrısı: her saniyede bir geçerli zamanı döndürür
rpc StreamTime (StreamTimeRequest) returns (stream StreamTimeResponse) {}
}
// Geçerli zamanı almak için bir isteği temsil eden bir mesaj
message GetTimeRequest {
// İstenen zamanın saat dilimi
string timezone = 1;
}
// Geçerli zamanı içeren bir yanıtı temsil eden bir mesaj
message GetTimeResponse {
// ISO 8601 formatında geçerli zaman
string time = 1;
}
// Geçerli zamanın akışını yapmak için bir isteği temsil eden bir mesaj
message StreamTimeRequest {
// İstenen zamanın saat dilimi
string timezone = 1;
}
// Geçerli zamanı içeren bir yanıtı temsil eden bir mesaj
message StreamTimeResponse {
// ISO 8601 formatında geçerli zaman
string time = 1;
}
Hizmetinizi uygulamak için, seçtiğiniz programlama dili için bir gRPC kitaplığı kullanmanız gerekir. gRPC, C#, C++, Go, Java, Node.js, Python, Ruby ve daha fazlası gibi birçok dili destekler. Her dilin, gRPC hizmetleri oluşturmak ve tüketmek için kendi API'si ve kuralları vardır. Örneğin, burada Python'da TimeService'in basit bir uygulaması bulunmaktadır:
import grpc
import time
from concurrent import futures
from example_pb2 import GetTimeRequest, GetTimeResponse, StreamTimeRequest, StreamTimeResponse
from example_pb2_grpc import TimeServiceServicer, add_TimeServiceServicer_to_server
# TimeService'i uygulayan bir sınıf
class TimeService(TimeServiceServicer):
# Tek yönlü çağrı: geçerli zamanı döndürür
def GetTime(self, request, context):
# İsteğin saat dilimini al
timezone = request.timezone
# İstenen saat dilimindeki geçerli zamanı al
time = get_current_time(timezone)
# Geçerli zamanı içeren bir yanıt oluştur ve döndür
response = GetTimeResponse(time=time)
return response
# Sunucu akışı çağrısı: her saniyede bir geçerli zamanı döndürür
def StreamTime(self, request, context):
# İsteğin saat dilimini al
timezone = request.timezone
# Süresiz döngü
while True:
# İstenen saat dilimindeki geçerli zamanı al
time = get_current_time(timezone)
# Geçerli zamanı içeren bir yanıt oluştur ve üret
response = StreamTimeResponse(time=time)
yield response
# Bir saniye bekle
time.sleep(1)
# Belirli bir saat dilimindeki geçerli zamanı döndüren bir işlev
def get_current_time(timezone):
# TODO: bu işlevi uygulayın
pass
# Bir gRPC sunucusu oluştur
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
# TimeService'i sunucuya ekle
add_TimeServiceServicer_to_server(TimeService(), server)
# Sunucuyu 50051 numaralı portta başlat
server.add_insecure_port('[::]:50051')
server.start()
# Sonlandırmayı bekle
server.wait_for_termination()
Hizmetinizi tüketmek için, seçtiğiniz programlama dili için bir gRPC istemcisi kullanmanız gerekir. gRPC istemcileri, gRPC sunucularıyla iletişim kurmak için stub'ları kullanır. Stub'lar, protokol tamponu dosyasından oluşturulur ve hizmet yöntemlerine karşılık gelen yöntemler sağlar. Örneğin, burada Python'da TimeService'i çağıran basit bir istemci bulunmaktadır:
import grpc
from example_pb2 import GetTimeRequest, StreamTimeRequest
from example_pb2_grpc import TimeServiceStub
# Sunucuya bir gRPC kanalı oluştur
channel = grpc.insecure_channel('localhost:50051')
# TimeService için bir stub oluştur
stub = TimeServiceStub(channel)
# Tek yönlü çağrı: UTC'deki geçerli zamanı al
request = GetTimeRequest(timezone='UTC')
response = stub.GetTime(request)
print(f'UTC'deki geçerli zaman {response.time}')
# Sunucu akışı çağrısı: PST'deki geçerli zamanın akışını yap
request = StreamTimeRequest(timezone='PST')
responses = stub.StreamTime(request)
for response in responses:
print(f'PST'deki geçerli zaman {response.time}')
Neden gRPC Akışı Kullanmalısınız?
gRPC akışı, API'leriniz için aşağıdakiler gibi birçok avantaj sunar:
- Performans: gRPC akışı, bağlantıların açılıp kapanmasının yükünü azaltır ve tek bir bağlantıda birden fazla mesaj göndermenize ve almanıza olanak tanır. Bu, API'lerinizin gecikme süresini ve verimini iyileştirir ve onları daha duyarlı ve verimli hale getirir.
- Güvenilirlik: gRPC akışı, akış kontrolü ve hata işlemeyi destekleyen HTTP/2'yi kullanır. Akış kontrolü, veri aktarım hızını kontrol etmenize ve tıkanıklığı ve arabellek taşmasını önlemenize olanak tanır. Hata işleme, hataları tespit etmenize ve kurtarmanıza ve bağlantıyı düzgün bir şekilde sonlandırmanıza olanak tanır. Bu özellikler, API'lerinizin güvenilirliğini ve sağlamlığını sağlamaya ve veri kaybını ve bozulmasını önlemeye yardımcı olur.
- Esneklik: gRPC akışı, kullanım durumunuza ve gereksinimlerinize bağlı olarak farklı iletişim desenleri kullanmanıza olanak tanır. Tek yönlü, sunucu akışı, istemci akışı ve çift yönlü akış arasında seçim yapabilir ve bunlar arasında kolayca geçiş yapabilirsiniz. Bu, API'leriniz üzerinde daha fazla esneklik ve kontrol sağlar ve farklı senaryoları ve zorlukları ele almanıza olanak tanır.
- Basitlik: gRPC akışı, protokol tamponlarını ve gRPC kitaplıklarını kullanarak API'lerinizin geliştirilmesini ve bakımını basitleştirir. Protokol tamponları, hizmetinizi ve mesajlarınızı net ve öz bir şekilde tanımlamanıza ve farklı diller ve platformlar için kod oluşturmanıza olanak tanır. gRPC kitaplıkları, hizmetinizi tutarlı ve sezgisel bir API kullanarak oluşturmanıza ve tüketmenize ve akış ve HTTP/2'nin düşük seviyeli ayrıntılarını sizin için işlemenize olanak tanır. Bu, kodunuzu daha okunabilir, yeniden kullanılabilir ve taşınabilir hale getirir ve API'lerinizin karmaşıklığını ve kalıp kodunu azaltır.

gRPC Akış Hizmetleri Nasıl Test Edilir ve Hata Ayıklanır?
gRPC akış hizmetlerini test etmek ve hata ayıklamak, özellikle farklı diller ve platformlar kullanıyorsanız zorlu olabilir. Neyse ki, size yardımcı olabilecek bir araç var: Apidog.
Apidog , basit ve sezgisel bir arayüz kullanarak gRPC akış hizmetlerinizi test etmenize ve hata ayıklamanıza olanak tanıyan web tabanlı bir araçtır. apidog, C#, C++, Go, Java, Node.js, Python, Ruby ve daha fazlası gibi birçok dili destekler. Apidog ayrıca, tek yönlü, sunucu akışı, istemci akışı ve çift yönlü akış gibi farklı iletişim desenlerini de destekler.
Apidog ile şunları yapabilirsiniz:
- Güvenli veya güvensiz bir kanal kullanarak gRPC sunucunuza bağlanın ve çağırmak istediğiniz hizmeti ve yöntemi belirtin.
- JSON veya ikili bir biçim kullanarak gRPC sunucunuza istekler gönderin ve her istek için meta verileri ve son tarihi belirtin.
- JSON veya ikili bir biçim kullanarak gRPC sunucunuzdan yanıtlar alın ve her yanıt için meta verileri ve durumu görüntüleyin.
- İsteklerinizin ve yanıtlarınızın gecikme süresini, verimini ve hatalarını gösteren grafikler ve çizelgeler kullanarak gRPC bağlantınızın performansını ve durumunu izleyin.
- İsteklerinizin ve yanıtlarınızın ayrıntılarını ve hatalarını gösteren ve belirli olayları filtrelemenize ve aramanıza olanak tanıyan günlükler ve izlemeler kullanarak gRPC hizmetinizde hata ayıklayın.


Apidog, gRPC akış hizmetlerinizi test etmenize ve hata ayıklamanıza ve beklendiği gibi çalıştıklarından emin olmanıza yardımcı olabilecek güçlü ve kullanımı kolay bir araçtır.
Sonuç
gRPC akışı, HTTP/2 ve protokol tamponlarını kullanarak tek bir bağlantıda birden fazla mesaj göndermenize ve almanıza olanak tanıyarak API'lerinizi daha hızlı ve daha güvenilir hale getirebilecek bir özelliktir. gRPC akışı ayrıca, farklı iletişim desenleri ve diller kullanmanıza ve tutarlı ve sezgisel bir API sağlamanıza olanak tanıyarak size esneklik ve basitlik sunar. gRPC akışı, özellikle büyük miktarda veri, gerçek zamanlı güncellemeler veya karmaşık etkileşimleri işlemeniz gerekiyorsa, API'leriniz için harika bir seçimdir.
gRPC akışı hakkında daha fazla bilgi edinmek istiyorsanız, https://grpc.io/docs adresindeki resmi belgelere göz atabilirsiniz. gRPC akış hizmetlerinizi test etmek ve hata ayıklamak istiyorsanız, basit ve sezgisel bir arayüz kullanarak gRPC akış hizmetlerinize bağlanmanıza, göndermenize, almanıza, izlemenize ve hata ayıklamanıza olanak tanıyan web tabanlı bir araç olan Apidog'u kullanabilirsiniz. Apidog'u ücretsiz deneyebilirsiniz.