Multi-protocol Support
gRPC/gRPC-Web/Connect
The multi-protocol support is based on ConnectRPC. So with FauxRPC, you get gRPC, gRPC-Web and Connect out of the box.
REST
FauxRPC does a little bit more than gRPC-based protocols. It allows you to use google.api.http
annotations to present a JSON/HTTP API, so you can gRPC and REST together! This is normally done with an additional service that runs in-between the outside world and your actual gRPC service but with FauxRPC you get the so-called transcoding from HTTP/JSON to gRPC all in the same package. Here’s a concrete example:
syntax = "proto3";
package http.service;
import "google/api/annotations.proto";
service HTTPService {
rpc GetMessage(GetMessageRequest) returns (Message) {
option (google.api.http) = {get: "/v1/{name=messages/*}"};
}
}
message GetMessageRequest {
string name = 1; // Mapped to URL path.
}
message Message {
string text = 1; // The resource content.
}
Again, we start the service by building the descriptors and using
$ buf build ./httpservice.proto -o ./httpservice.binpb
$ fauxrpc run --schema=httpservice.binpb
Now that we have the server running we can test this with the “normal” curl:
$ curl http://127.0.0.1:6660/v1/messages/123456
{"text":"Retro."}⏎
Sweet. You can now easily support REST alongside gRPC. If you are wondering how to do this with “real” services, look into vanguard-go. This library is doing the real heavy lifting.
More documentation on the google.http.api
annotations can be found on Google’s Transcoding Documentation, the google/api/http.proto file and the gRPC-Gateway documentation site.