Protocol Buffers

Protocol Buffers (Protobuf) er et multiplattforms dataformat med fri og åpen kildekode som brukes til serialisere strukturerte data. Formatet brukes for å utvikle programmer som kommuniserer med hverandre over et nettverk eller for lagring av data. Metoden gjør bruk av et grensesnittbeskrivelsesspråk som beskriver strukturen til noen data, og et program som genererer kildekoden for den beskrivelsen for å generere eller parse en strøm av biter som representerer de strukturerte dataene.

Bruk hos Google 
Protocol Buffers ble utviklet av Google utviklet for intern bruk, og ga ut en kodegenerator for flere språk under en lisens for åpen kildekode. Designmålene var enkelhet og bedre ytelse, og den ble spesielt designet for å være mindre og raskere enn XML. Protocol Buffers er mye innad i Google sine tjenester for lagring og utveksling av all slags strukturert informasjon. Metoden tjener som grunnlag for et system for tilpassede eksterne prosedyrekall (RPC) som brukes for nesten alle mellommaskin-kommunikasjon hos Google.

Teknisk 
Datastrukturene (kalt messages i Protocol Buffers) og tjenestene er beskrevet i en proto-definisjonsfil (.proto) og kompileres med kommandoen protocol. Denne kompileringen genererer kode som kan kalles av en avsender eller mottaker av disse datastrukturene. Eksempelvis kan eksempel.pb.cc og eksempel.pb.h bli generert fra eksempel.proto, og disse definerer C++ klasser for hver melding og tjeneste i eksempel.proto.

Meldingene blir serialiserte inn i et binært kodet wireprotokoll-format som er kompakt, forover - og bakoverkompatibelt, men ikke selvbeskrivende (det vil si at det ikke er mulig å fortelle navn, mening eller fulle datatyper i felter uten ekstern spesifikasjon). Det er ingen definert måte å inkludere eller referere til en slik ekstern spesifikasjon (schema) innenfor en Protocol Buffers-fil. Den offisielt støttede implementeringen inkluderer et ASCII-serialiseringsformat, men selv om dette formatet beskriver seg selv mister det frem- og bakoverkompatibilitet, og er dermed ikke et godt valg for andre bruksområder enn feilsøking.

Selv om hovedformålet med Protocol Buffers er å lette nettverkskommunikasjon gjør Protocol Buffers sin enkelhet og hastighet at den også er et alternativ til datasentrerte C++ klasser og -strukturer, særlig der interoperabilitet med andre språk eller systemer kan være nødvendig i fremtiden.

Språkstøtte 
Protobuf 2.0 har en kodegenerator for C++, Java, C# og Python.

Protobuf 3.0 har en kodegenerator for C++, Java (inkludert JavaNano, en dialekt beregnet for miljøer med lav ressursbruk), Python, Go, Ruby, Objective-C og C#. Den støtter også JavaScript fra og med 3.0.0-beta-2.

Tredjeparts-implementeringer er også tilgjengelige for Ballerina, C, C++, Dart, Eliksir, Erlang, Haskell, JavaScript, Perl, PHP, R, Rust, Scala, Swift, Julia og Nim.

Alternative protokoller 
Protocol Buffers ligner på Apache Thrift (som brukes av Facebook og Evernote), Ion (opprettet av Amazon) og Microsoft Bond-protokollene. I tillegg tilbyr Protocol Buffers gRPC som en konkret RPC-protokollstakk for bruk med definerte tjenester.

Se også 
 gRPC
 ASN.1

Referanser 

Fri programvare
Filformater