**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
----------

1. ↑  Eishay Smith. «jvm-serializers Benchmarks». Besøkt 12. juli 2010.
2. ↑  Kenton Varda. «A response to Steve Vinoski». Besøkt 14. juli 2008.
3. ↑  «text\_format.h - Protocol Buffers - Google Code». Besøkt 2. mars 2012.
4. ↑  «Protocol Buffers in C#». Besøkt 12. mai 2017.
5. ↑  «Protocol Buffers Language Guide». Besøkt 21. april 2016.
6. ↑  «Language Guide (proto3) | Protocol Buffers». Besøkt 9. august 2020.
7. ↑  «Release Protocol Buffers v3.0.0-beta-2 · protocolbuffers/protobuf». Besøkt 9. august 2020.
8. ↑  «Ballerina - GRPC». Arkivert fra originalen 15. november 2021. Besøkt 24. mars 2022.
9. ↑  «Nanopb - protocol buffers with small code size». Besøkt 12. desember 2017.
10. ↑  «Protocol Buffers implementation in C». Besøkt 12. desember 2017.
11. ↑  «Embedded Proto - Protobuf for microcontrollers». Besøkt 15. august 2021.
12. ↑  «Protox».
13. ↑  «Protobuf-elixir».
14. ↑  «Tomas-abrahamsson/GPB».
15. ↑  «Proto-lens».
16. ↑  «Protocol Buffers for JavaScript.». github.com. Besøkt 14. mai 2016.
17. ↑  «Rprotobuf/SRC at master · eddelbuettel/Rprotobuf».
18. ↑  «Rust-protobuf».
19. ↑  «PROST!».
20. ↑  «Quick-protobuf».
21. ↑  «Swift Protobuf».
22. ↑  «ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting». Besøkt 7. november 2012.
23. ↑  «Protobuf implementation in pure Nim that leverages the power of the macro system to not depend on any external tools».
24. ↑  «grpc». Besøkt 2. oktober 2016.