gRPC
Kısaca
gRPC, uzak sunucudaki fonksiyonları yerelmiş gibi çağırmaya yarayan açık kaynaklı framework'tür; Protocol Buffers ve HTTP/2 ile hızlı, tipli mesajlar taşır.
gRPC nedir?
gRPC bir uzak yordam çağrısı (RPC) framework'üdür: ağ ayrıntıları sizin yerinize halledilirken, bir programın aslında başka bir makinede çalışan bir fonksiyonu çağırmasına olanak tanır. Google'da geliştirildi, 2015'te açık kaynak olarak yayımlandı ve bugün bir Cloud Native Computing Foundation (CNCF) projesidir. Çoğunlukla backend servisleri arasındaki iletişimde kullanılır.
İşe, servisinizi Protocol Buffers kullanarak bir .proto dosyasında tanımlamakla başlarsınız; Protocol Buffers, katı bir şemaya sahip, kompakt bir ikili (binary) veri biçimidir. Ardından bir kod üretici Go, Java, Python, C# ve TypeScript gibi dillerde istemci ve sunucu kodu oluşturur; böylece uzak bir metodu çağırmak, tipli argümanlarla yerel bir fonksiyonu çağırmak gibi hissettirir. gRPC, birçok çağrının tek bir bağlantıyı paylaşmasına ve verinin her iki yönde ya da tek yönde akışına (streaming) izin veren HTTP/2 üzerinde çalışır.
REST API esnek, insan tarafından okunabilir mektuplar takas etmek gibiyse gRPC, iki tarafın önceden üzerinde anlaştığı bir senaryoyu izleyen telefon görüşmesi gibidir; her taraf her mesajın tam olarak neyi içereceğini bilir. Bu katılık ve ikili kodlama gRPC'yi hızlı ve kompakt yapar; bu yüzden mikroservislerde, mobil backend'lerde ve çok yüksek istek hacmine sahip sistemlerde popülerdir.
gRPC sıklıkla REST ile karşılaştırılır. REST, kaynakları URL'lerde sunar, genellikle JSON gönderir ve doğrudan tarayıcılardan çalışır; gRPC ise metotları sunar, ikili Protocol Buffer mesajları gönderir ve bir tarayıcıdan çağrılabilmesi için gRPC-Web varyantına ya da bir proxy'ye ihtiyaç duyar. Birçok ekip gRPC'yi servisler arasında dahili olarak kullanır, herkese açık ve tarayıcı istemcileri için ise bir REST ya da GraphQL API'si sunar.
Önemli noktalar
- gRPC, istemcilerin uzak bir sunucudaki metotları yerel fonksiyonlar gibi çağırmasını sağlar.
- Servisler ve mesajlar, Protocol Buffers kullanan
.protodosyalarında tanımlanır. - İstemci ve sunucu kodu birçok dil için otomatik olarak üretilir.
- HTTP/2 üzerinde çalışır ve iki yönde de streaming destekler.
- Tarayıcılar gRPC-Web ya da bir proxy gerektirir; bu yüzden gRPC en çok backend servisleri arasında kullanılır.
Örnek
// user.proto: the contract shared by client and server
syntax = "proto3";
package users.v1;
service UserService {
// Unary call: one request, one response
rpc GetUser (GetUserRequest) returns (User);
// Server streaming: one request, a stream of responses
rpc ListUsers (ListUsersRequest) returns (stream User);
}
message GetUserRequest { int64 id = 1; }
message ListUsersRequest { int32 page_size = 1; }
message User { int64 id = 1; string name = 2; string email = 3; }Sık sorulan sorular
gRPC ile REST arasındaki fark nedir?
REST kaynaklar için URL'leri, standart HTTP metotlarını ve genellikle JSON'u kullanır; gRPC ise tipli metotları bir .proto dosyasında tanımlar ve HTTP/2 üzerinden kompakt ikili mesajlar gönderir. gRPC genellikle daha hızlı ve daha katıdır; REST'in hatalarını ayıklamak daha kolaydır ve tarayıcılarda yerel olarak çalışır.
gRPC'yi bir web tarayıcısından kullanabilir miyim?
Doğrudan hayır, çünkü tarayıcılar gRPC'nin dayandığı düşük seviyeli HTTP/2 özelliklerini sunmaz. Web uygulamaları, istekleri çeviren bir proxy üzerinden çoğunlukla gRPC-Web kullanır ya da bunun yerine ayrı bir REST veya GraphQL API'si çağırır.
Protocol Buffers nedir?
Protocol Buffers ya da protobuf, Google'da geliştirilmiş, yapılandırılmış veriyi tanımlamak ve küçük ikili mesajlara serileştirmek için kullanılan, dilden bağımsız bir biçimdir. gRPC, servisleri tanımlamak ve her isteği ile yanıtı kodlamak için varsayılan olarak onu kullanır.
Sık karşılaştırılanlar
İlgili sayfalar
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- GraphQLBackend ve API'ler, s. 18GraphQL, istemcilerin tam ihtiyaç duyduğu veriyi, çoğunlukla tek bir endpoint üzerinden tek istekte istemesini sağlayan API sorgu dili ve çalışma zamanıdır.
- JSONBackend ve API'ler, s. 24JSON, yapılandırılmış veriyi anahtar-değer çiftleri ve listelerle saklayıp aktarmaya yarayan, insanın da makinenin de okuyabildiği hafif bir metin biçimidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin