Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gRPC server error handler golang

Tags:

http

go

grpc

protoc

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?

like image 629
own3dh2so4 Avatar asked Aug 02 '17 08:08

own3dh2so4


2 Answers

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")
}
like image 50
Nebril Avatar answered Nov 11 '22 02:11

Nebril


Error Handler:

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
return data, status.Errorf(
            codes.InvalidArgument,
            fmt.Sprintf("Your message", req.data),
        )

For need more info about the error handling take a look below links.

https://grpc.io/docs/guides/error.html

http://avi.im/grpc-errors/

like image 40
Black_Dreams Avatar answered Nov 11 '22 00:11

Black_Dreams