2017-08-02 8 views
1

golangとgRPCとprotobufの良いプラクティスについて知りたい。gRPCサーバーのエラーハンドラーgolang

私はprotobufsをコンパイル

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

次gRPCサービスを実施しています。実際、protobufはhttpからgrpcへhttpproxyを与えてくれます。メッセージ「400のデフォルトのエラーメッセージ」、メッセージが働くと

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") 
} 

は、私が(HTTPプロキシで)400 HTTPエラーをしたいが、常にHTTPエラー:

コードは、このサービスを実装します500です。

これに関するポストまたはドキュメントをご存知ですか?

答えて

1

protobufsがメッセージを適切にシリアル化できるようにするには、空のmodel.Modelオブジェクトを返す必要があります。

は今、それが働いている、

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") 
} 
+0

おかげであなたを試してみてください。 grpc/codesパッケージに入っているコードでなければ、使用するコードは直接http(200,300,400 ...)ではないことをコメントとして追加したいと思います – own3dh2so4

関連する問題