在实体模型准备好之后,我发现在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()
的响应。
答案 0 :(得分:1)
因为gRPC和REST遵循不同的概念。
在REST中,服务器维护状态,您只需从客户端进行控制即可(这就是使用GET,POST,PUT,UPDATE,DELETE请求类型的方式)。相反,过程调用具有定义明确的返回类型,该类型可靠且自描述。 gRPC不遵循服务器是有关对象状态的唯一事实来源的概念。相反,从概念上讲,您可以使用常规调用与服务器进行交互,就像在本地设置中一样。
顺便说一句,在良好的RESTful设计中,您确实将模式用于JSON返回,因此,即使您可以滥用它,它实际上也不是任意的。例如,检查OpenAPI 3 specification for the response object definition:它们通常包含对架构的引用。