Search code examples
httpgogrpcprotoc

gRPC server error handler golang


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?


Solution

  • 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.Error(400,"Default error message for 400")
    }