gRPC server error handler golang

own3dh2so4 picture own3dh2so4 · Aug 2, 2017 · Viewed 7k times · Source

I want know about good practices with golang and gRPC and protobuf.

I am implementing the following gRPC service

service MyService {
   rpc dosomethink(model.MyModel) returns (model.Model) {
     option (google.api.http) = { post: "/my/path" body: "" };
   }
}

I compiled the protobufs. In fact, the protobuf give us a httpproxy from http to grpc.

The code to implement this service:

import "google.golang.org/grpc/status"

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {

   return nil, status.New(400,"Default error message for 400")
}

I want a 400 http error (in the http proxy) with the message "Default error message for 400", the message works, but the http error always is 500.

Do you know any post or doc about this?

Answer

Nebril picture Nebril · Aug 2, 2017

You need to return empty model.Model object in order for protobufs to be able to properly serialise the message.

Try

import "google.golang.org/grpc/status"

func (Abcd) Dosomethink(c context.Context, sessionRequest *model.MyModel) (*model.Model, error) {

   return &model.Model{}, status.New(400,"Default error message for 400")
}