# gRPC

Adres: https://softwaredictionary.org/tr/terimler/grpc
Kategori: Backend ve API'ler
Son güncelleme: 2026-09-30

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 `.proto` dosyaları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: Bir .proto dosyasında gRPC servisi tanımlamak

```protobuf
// 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.

---

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