当前位置: 首页 > 知识库问答 >
问题:

如何使用gRPC服务创建CRUD而无需太多重复?

黄沈浪
2023-03-14

我试图使用gRPC来构建一个简单的CRUD服务,但我一直发现自己创建了大量重叠的消息。

这最好用一个例子来描述:

message Todo {
  // id is only available for a persisted entity in database.
  string id = 1;
  string content = 2;
  // this is only available for users with admin role.
  string secret_content = 3;
}

service Todos {
  rpc CreateTodo(CreateRequest) returns (CreateResponse) {}
  rpc ReadTodo(ReadRequest) returns (ReadResponse) {}
}

message CreateRequest {
  // this todo is not supposed to have id,
  // should I create another version of Todo without an id field?
  Todo todo
}

message CreateResponse {
  // this todo will always have an id.
  Todo todo = 1;
}

message ReadRequest {
  string id = 1;
}

message ReadResponse {
  // this todo should only have the secret_content field if the
  // user is authenticated as an admin, if not, the field should not
  // fallback to the zero value, the whole field must be missing. 
  Todo todo = 1;
}

这是使用gRPC构建类似CRUD的资源的好方法吗?也就是说,有一条代表资源的消息(Todo),并将该消息包装为每个操作的响应/请求类型。

待办事项类型消息是否应该包含所有请求/响应所涵盖的所有字段,而不是设置每个都不使用的字段?

共有1个答案

翁宜年
2023-03-14

待办事项类型消息是否应该包含所有请求/响应所涵盖的所有字段,而不是设置每个都不使用的字段?

是的,这似乎是一个合理的设计。在协议v2中,您会将这些字段标记为可选以使其更容易理解。但在v3中,无论如何,所有字段默认都是可选的。

 类似资料:
  • 根据这个http://www.grpc.io/docs/tutorials/basic/python.html#creating-这里的服务器和示例https://github.com/grpc/grpc/tree/v1.0.0/examples/python/route_guide,当我生成我的pb2时。py文件中,应创建几个名为Stub和Servicer的类。但是,我生成了pb2。py文件不包

  • 有必要将通用GRPC服务器实现为存根。 找不到与服务器类似的内容,仅针对客户端。 非常感谢!

  • 2.4 多服务&多监听 2.4.1 在Go代码中声明 假定用户需要创建的Web服务 服务名称 版本号 监听地址 网络类型 读取请求数据超时 写入响应数据超时 myapp1 1.0 0.0.0.0:8080、0.0.0.0:4430 http、https(TLS) 0 0 myapp2 2.0 0.0.0.0:8081、0.0.0.0:4431 http、https(TLS) 0 0 无版本号的服务

  • 我们想推出一个新的开源项目,将作为一个桌面应用程序。我们希望使用Java Spring for business logic(后端)和Flutter构建GUI(就像我们可以创建移动和web应用程序一样)。 其想法是,用户可以选择将其Flutter desktop应用程序作为独立应用程序使用(业务逻辑在本地用java spring处理),或者将其桌面应用程序连接到我们提供的外部服务器java spr

  • 我正试图在谷歌云平台上创建一个服务账户,该账户只能访问谷歌驱动API。然而,我根本找不到这个角色: 此外,如果我创建了一个“通用服务帐户”,那么该用户可以添加实例等。这在过去是一个可怕的安全问题,因为拥有该密钥的用户实际上创建了未经授权的实例(因此出现了上述问题)。 我该如何创建一个可以访问Google Drive API的服务帐户,而不是别的?

  • 我有一个方法,可以启动一个简单的cpp grpc服务器。 我想做