gRPC to JSON proxy generator following the gRPC HTTP spec

View project on GitHub

HttpBody messages

The HTTP Body messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully!

Example Usage

  1. Create a mux and configure it to use the HTTPBodyMarshaler.
	mux := runtime.NewServeMux()
  1. Define your service in gRPC with an httpbody response message
import "google/api/httpbody.proto";
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";

service HttpBodyExampleService {
	rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) {
		option (google.api.http) = {
			get: "/helloworld"
  1. Generate gRPC and reverse-proxy stubs and implement your service.

Example service implementation

func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) {
	return &httpbody.HttpBody{
		ContentType: "text/html",
		Data:        []byte("Hello World"),
	}, nil