Protocol Buffers(protobuf) Nedir?

1 minute read

Başlamadan önce, konuyla ilgili benim de temel kaynak olarak aldığım mükemmel bir post’un linkini aşağıya bırakıyorum;

https://buraksenyurt.com/post/golang-google-protobuf-kullanimi

Protocol Buffer veya ProtoBuf, aynı XML ve JSON gibi bir veri transfer protokolüdür. Belirli bir notasyonu vardır. Bu notasyona göre yazılmış olan *.proto dosyaları protobuf derleyicisi ile belirli bir programlama diline göre derlenir. Ortaya bu .proto dosyasında şablonu verilmiş veriyapısının belirlenen dilin veriyapısıyla oluşturulmuş hali bulunan *.pb.go gibi, sonu o dilin uzantısıyla biten bir dosya oluşur.

ProtoBuf’lar aynı zamanda gPRC haberleşmesinde kullanılan veritipidir. Örneğin backendde GO ve Python ile yazılmış mikroservislerimiz olduğunu düşünelim, bu servislerin protolar aracılığıyla haberleşme adımları şu şekildedir;

  • .proto uzantılı dosya notasyona uygun şekilde yazılır. Hangi veritipleri hangi şekilde bulunacaksa burada belirtilir.
  • Ardından bu proto dosyası hedef programlama dili belirtilerek derlenir. Bu derleme sonucunda .proto dosyasında oluşturulan veri yapısının belirtilen dil syntax’ıyla implemente edilmiş hali ortaya çıkar. Uzantısı pb.go şeklindedir. Tabii .go kısmı dile göre değişik generate edilecektir.
  • Ardından sıra derlenmiş bu *.pb.go dosyasını kullanmaya geliyor. Eğer bu dosyayı diğer tüm projelerden erişilir bir paket yapmak istiyorsak go workspace’ine koyup yukarıdan import ediyoruz. Derlenmiş protomuzu aynı paketteki diğer go dosyalarından kullanmak istiyorsak import etmeye gerek yok, direkt kullanıyoruz. Go mikroservisinden bu *.pb.go dosyası kullanılarak bazı structlar generate ettiğimizi düşünelim, şimdi biz bu verileri Python servisine göndermek istiyoruz. Bunun için *.pb.go dosyasını baz alarak oluşturduğumuz verileri önce serialize ediyoruz. Neden? Çünkü Go içerisinde tamamen Go veriyapısında veriler generate ediyoruz, bunları bu haliyle Python’a gönderirsek orada bundan hiçbir şey anlaşılmayacaktır.
  • Go’da serialize edip yolladığımız verileri Python’da deserialize edip okuyoruz ve gerekli işlemleri yapıyoruz.

Kısaca protobuf ve gPRC ile kullanımını anlatmaya çalıştım. Başka bir postta da örnekleriyle meseleyi vuzuha kavuşturmayı planlıyorum. Herkese iyi günler.

Leave a comment