message MyMessage {
int32 a = 1;
string b = 2;
}
gRPC Remote Procedure Calls
At Netflix, we heavily use gRPC for the purpose of backend to backend communication.
Cockroach LABS
Cisco
Square
Protocol Buffers
Protobuf ist eine binäre Serialisierungssprache, die sprachunabhängig ist.
Protobuf unterstützt alle primitiven Datentypen.
Zusätzlich können eigene Datentypen (messages) erstellt werden. Innerhalb dieser Typen muss die Position der benutzen Eigenschaften definiert werden.
message MyMessage {
int32 a = 1;
string b = 2;
}
Mit dem repeated
Keyword kann man eine Liste von Messages erstellen.
message Person {
string name = 1;
int32 id = 2;
repeated string hobbies = 3;
}
syntax = "proto3";
Als Erstes muss eine Protobuf Version definiert werden, wobei proto3 der Standard ist.
syntax = "proto3";
package my_package;
Optional kann ein Package angegeben werden, falls es bei mehreren Files gleiche Message Names gibt.
Mit dem option
Keyword können compile flags befüllt werden.
syntax = "proto3";
option java_package = "com.example";
syntax = "proto3";
option java_package = "com.example";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
Mit einem Service definiert man alle Methoden (Schnittstellen), die man in gRPC verwenden möchte.
rpc SayHello(HelloRequest) returns (HelloResponse);
rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
gRPC-Web ist keine gRPC Implementation für Webbrowser. Es ist ein alternatives protokoll was mit einem http wrapper wieder zu gRPC umgewandelt werden muss.