如何改善gRPC的开发?

时间:2019-05-05 02:59:05

标签: protocol-buffers grpc

在实体模型准备好之后,我发现在protobuf message文件中再次定义.proto很麻烦。

例如,通过gRPC公开CRUD操作,您需要以table schema的方式在.proto文件中定义message,因为gRPC需要它。

在传统的restful API开发中,我们不需要定义messages,因为我们只返回了一些json,并且json对象可以是任意的。 / p>

有什么建议吗?

P.S。我知道gRPC在运行时比restful API更有效。但是,我发现在开发时它的效率远远低于restful API。

在我找到提高效率的优雅方法之前,我目前使用一种丑陋的方法:定义一个JSON message type

syntax = "proto3";
package user;
service User {
    rpc FindOneByJSON(JSON) returns (JSON) {}
    rpc CreateByJSON(JSON) returns (JSON) {}
}
message JSON {
    string value = 1;
}

这很丑陋,因为它需要调用者JSON.stringify()的参数和JSON.parse()的响应。

1 个答案:

答案 0 :(得分:1)

因为gRPC和REST遵循不同的概念。

在REST中,服务器维护状态,您只需从客户端进行控制即可(这就是使用GET,POST,PUT,UPDATE,DELETE请求类型的方式)。相反,过程调用具有定义明确的返回类型,该类型可靠且自描述。 gRPC不遵循服务器是有关对象状态的唯一事实来源的概念。相反,从概念上讲,您可以使用常规调用与服务器进行交互,就像在本地设置中一样。

顺便说一句,在良好的RESTful设计中,您确实将模式用于JSON返回,因此,即使您可以滥用它,它实际上也不是任意的。例如,检查OpenAPI 3 specification for the response object definition:它们通常包含对架构的引用。