Hopp til innhold

Protocol Buffers

Fra Wikipedia, den frie encyklopedi

Protocol Buffers(Protobuf) er etmultiplattformsdataformat medfri og åpen kildekodesom brukes tilserialiserestrukturerte data. Formatet brukes for å utvikle programmer som kommuniserer med hverandre over et nettverk eller for lagring av data. Metoden gjør bruk av etgrensesnittbeskrivelsesspråksom beskriver strukturen til noen data, og et program som generererkildekodenfor den beskrivelsen for å generere ellerparseen strøm avbitersom representerer de strukturerte dataene.

Bruk hos Google

[rediger|rediger kilde]

Protocol Buffers ble utviklet avGoogleutviklet for intern bruk, og ga ut enkodegeneratorfor 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 ennXML.[1]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 tilpassedeeksterne prosedyrekall(RPC) som brukes for nesten alle mellommaskin-kommunikasjon hos Google.[2]

Datastrukturene (kaltmessagesi Protocol Buffers) og tjenestene er beskrevet i en proto-definisjonsfil (.proto) og kompileres med kommandoenprotocol.Denne kompileringen genererer kode som kan kalles av en avsender eller mottaker av disse datastrukturene. Eksempelvis kaneksempel.pb.ccogeksempel.pb.hbli generert fraeksempel.proto,og disse definererC++klasser for hver melding og tjeneste ieksempel.proto.

Meldingene blir serialiserte inn i etbinærtkodet 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,[3]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

[rediger|rediger kilde]

Protobuf 2.0 har enkodegeneratorforC++,Java,C#[4]ogPython.[5]

Protobuf 3.0 har en kodegenerator forC++,Java(inkludert JavaNano, en dialekt beregnet formiljøer med lav ressursbruk),Python,Go,Ruby,Objective-CogC#.[6]Den støtter også JavaScript fra og med 3.0.0-beta-2.[7]

Tredjeparts-implementeringer er også tilgjengelige for Ballerina,[8]C,[9][10]C++,[11]Dart, Eliksir,[12][13]Erlang,[14]Haskell,[15]JavaScript,[16]Perl,PHP,R,[17]Rust,[18][19][20]Scala,Swift,[21]Julia[22]og Nim.[23]

Alternative protokoller

[rediger|rediger kilde]

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