# Protocol Buffers

Adres: https://softwaredictionary.org/tr/terimler/protobuf
Kategori: Backend ve API'ler
Son güncelleme: 2026-10-06
Okunuşu: protobaf

Kısaca: Protocol Buffers (protobuf), yapılandırılmış veriyi bir şemayla tanımlayıp küçük ve hızlı ikili mesajlara dönüştüren, Google'ın dilden bağımsız veri biçimidir.

## Protocol Buffers nedir?

Kısaca protobuf olarak anılan Protocol Buffers, Google'da şirketin kendi servisleri için geliştirilen ve 2008'de açık kaynak olarak yayımlanan bir veri biçimidir. Verinizi bir kez bir `.proto` dosyasında tarif edersiniz; her mesaj orada `string name = 1;` gibi türü belli alanları listeler. Ardından `protoc` derleyicisi Java, Python, Go, C++, C#, Kotlin ve Dart gibi diller için, nesneleri bayta ve bayttan yeniden nesneye çeviren metotlara sahip sınıflar üretir.

Ağ üzerinde bir protobuf mesajı metin değil, ikili (binary) veridir. Her alan, alan numarası ve değerinin kompakt bir kodlamasıyla saklanır; bu yüzden `customer_email` gibi adlar hiç gönderilmez ve küçük bir tamsayı değeri tek bir bayta sığar. Bu nedenle mesajlar aynı verinin JSON hâlinden çok daha küçüktür ve daha hızlı okunup yazılır, ama onları anlamlandırmak için şemaya ihtiyaç duyarsınız. Biçim değişime göre tasarlanmıştır: yeni numaralarla alan ekleyebilirsiniz, eski programlar da tanımadıkları alanları atlar; yeter ki numaralar asla yeniden kullanılmasın.

Protobuf, gRPC'nin varsayılan mesaj biçimidir; ayrıca veri saklamak, Kafka ve diğer mesaj kuyrukları üzerinden olay göndermek ve büyük sistemlerin içindeki yapılandırmalar için de kullanılır. Onu, iki tarafın önceden bastığı ve kutuları numaralı bir form gibi düşünün: yalnızca kutu numaraları ve içerikleri yol alır, etiketler değil. 2024'ten beri `syntax = "proto3"` satırı yerini, aynı davranışları tek tek özellik ayarlarıyla yöneten `edition = "2023"` gibi edition'lara bırakıyor.

Protobuf sık sık JSON ile karşılaştırılır ve gRPC ile karıştırılır. JSON, herhangi bir programın şema olmadan okuyabildiği bir metindir; bu da hata ayıklamayı kolaylaştırır ve onu herkese açık web API'lerinin olağan seçimi yapar. Protobuf ise bu okunabilirlikten daha küçük mesajlar, daha hızlı ayrıştırma ve katı türler karşılığında vazgeçer. gRPC ise uzak metotları çağırmaya yarayan bir framework'tür; protobuf yalnızca onun servisleri tarif etmek ve mesajları kodlamak için kullandığı biçimdir, bu yüzden protobuf gRPC olmadan da kullanılabilir.

## Önemli noktalar

- Protobuf, veriyi `.proto` şema dosyalarında tanımlar ve kompakt ikili biçime serileştirir.
- `protoc` derleyicisi tek bir şemadan birçok dil için kod üretir.
- Alanlar numaralarla tanımlandığı için eski okuyucuları bozmadan yeni alanlar eklenebilir.
- Mesajlar JSON'dan küçük ve hızlıdır, ama insan tarafından okunamaz.
- gRPC varsayılan olarak protobuf kullanır, ama protobuf tek başına da işe yarar.

## Örnek: Bir .proto dosyasında mesaj şeması

```protobuf
syntax = "proto3";

package shop.v1;

message Order {
  int64 id = 1;                  // field numbers, not names, go on the wire
  string customer_email = 2;
  repeated LineItem items = 3;   // a list of LineItem messages
  reserved 4;                    // a removed field: never reuse its number
  optional string coupon = 5;    // added later; older readers skip it
}

message LineItem { string sku = 1; int32 quantity = 2; }

// Generate classes: protoc --python_out=gen --java_out=gen order.proto
```

## Sık sorulan sorular

**Protobuf, JSON'dan daha mı iyi?**

Kullanıma bağlı. Protobuf mesajları daha küçüktür, daha hızlı işlenir ve katı bir şemayla gelir; bu da servisler arasındaki iç trafiğe ve yüksek hacimlere uyar. JSON insan tarafından okunabilir ve üretilmiş kod gerektirmez; bu yüzden herkese açık ve tarayıcıya dönük API'lerin olağan seçimi olmaya devam eder.

**Protocol Buffers ile gRPC arasındaki fark nedir?**

Protocol Buffers, veriyi tarif etmek ve serileştirmek için bir biçimdir. gRPC ise servislerini tanımlamak ve her isteği ve yanıtı kodlamak için varsayılan olarak protobuf kullanan bir uzak prosedür çağrısı (RPC) framework'üdür.

**proto2 ile proto3 arasındaki fark nedir?**

İkisi `.proto` dilinin iki sürümüdür. 2016'da yayımlanan proto3, zorunlu (required) alanları ve özel varsayılan değerleri kaldırarak proto2'yi sadeleştirdi; ikisinin de yerini artık aynı seçimleri özellik ayarları olarak ifade eden edition'lar alıyor.

## Kaynaklar

- [Protocol Buffers documentation: Overview](https://protobuf.dev/overview/)
- [Protocol Buffers documentation: Encoding](https://protobuf.dev/programming-guides/encoding/)
- [Protocol Buffers documentation: Protobuf Editions Overview](https://protobuf.dev/editions/overview/)

---

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