Reputation: 1403
Is it a good choice to use Google Protocol Buffers in JavaScript or is it better to do it with JSON?
Also it'd be great if someone can give me a simple example about Protocol Buffers implementation in JavaScript. The documentation on the Google's site is scarce.
Upvotes: 93
Views: 102083
Reputation: 890
2023 Update. The JS implementation had been introduces and branched out of the main protoc app. Now you can install it using
npm i grpc-tools
Then use node node_modules/grpc-tools/bin/protoc.js the arguments are the same as for usual protoc. For example:
node node_modules/grpc-tools/bin/protoc.js --js_out=import_style=commonjs,binary:./dst --proto_path=./proto/ simple.proto
To use it with the usual require also install
npm i google-protobuf
Then you can simply require the resulting generated file and use it.
Upvotes: 2
Reputation: 35664
[edit] Google's open source implementation of protocol buffers is available on GitHub
The official protobuf project support only Java, C++, and Python. Not JavaScript.
According to the Wiki of the project, there are three projects porting protocol buffers to JavaScript.
Protobuf.js is up to date. protobuf-js has not been updated for two years, so I would favor Protobuf.js.
The question still is "Why?": protobuf may be a bit smaller, especially when a lot of numeric values are transferred, but JSON is simply the more common protocol in the JS space and probably better supported and easier to integrate into other tools.
Upvotes: 82
Reputation: 36051
Update (28/7/2016): Release 3.0.0 was published - supporting Javascript and other languages as well - in addition to some other features.
Google have recently added alpha support for JS to protobufs: https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2
Usage:
protoc -I=$SRC_DIR --js_out=$DST_DIR $SRC_DIR/addressbook.proto
Screenshots from the release documentation:
Upvotes: 44
Reputation: 7282
Protobuf 3.0.0 is out: https://github.com/google/protobuf/releases/tag/v3.0.0
And it support JavaScript natively. The basic information is in the announcement.
We are going to look into it soon.
Upvotes: 6
Reputation: 93
Try Protostuff!
I had a bit of hard time configuring but I'm sure that was more of my issue. You can serialize/deserialize a protobuff/protostuff message to/from JSON. I'm at the early stages of using this but it looks promising so far.
Upvotes: -1