Skip to content

Build and run an example SummatorService using clay Server

Nick K edited this page Jun 9, 2018 · 4 revisions

See example server.

This example uses sample SummatorService API w/ YAML-annotated HTTP endpoints and bundled server utrack/clay.Server.

First, generate your Go code from .proto using protoc:

cd doc/example/pb
protoc -I/usr/local/include -I. \
  -I$GOPATH/src \
  -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
  --go_out=plugins=grpc:. --goclay_out=grpc_api_configuration=sum.yaml:. ./sum.proto
  • This command generates HTTP endpoints based on YAML description. See Describing HTTP endpoints for info on YAML and inline HTTP endpoint definitons.

Then finish your gRPC service implementation as usual:

// SumImpl is an implementation of SummatorService.
type SumImpl struct{}

// Sum implements SummatorServer.Sum.
func (s *SumImpl) Sum(ctx context.Context, r *pb.SumRequest) (*pb.SumResponse, error) {
	if r.GetA() == 0 {
		return nil, errors.New("a is zero")
	}

	if r.GetB() == 65536 {
		panic(errors.New("we've got a problem!"))
	}

	sum := r.GetA() + r.GetB()
	return &pb.SumResponse{
		Sum: sum,
	}, nil
}

Add helper method to the implementation, so it would implement the "github.com/utrack/clay/transport".Service:

// GetDescription is a simple alias to the ServiceDesc constructor.
// It makes it possible to register the service implementation @ the server.
func (s *SumImpl) GetDescription() transport.ServiceDesc {
	return pb.NewSummatorServiceDesc(s)
}

Now, you can run the server. HTTP and gRPC traffic will be served at port 12345 with Swagger definition @ /swagger.json.

Clone this wiki locally