当前 REST 的 GRPC 设计 API

GRPC design of a current REST API

我正在研究将我们的许多 REST API 服务移植到 gRPC 模式的可能性,但事情就是这样。

我们目前大量使用 API 的一种方法,它根据作为参数接收的函数名称和作为请求主体的输入调用多个 PostgreSQL 函数,即: api.com/functions/exec/{name}, DB 中定义的函数接收和 returns JSON.

所以,如果我理解得很好,gRPC 方法只能有一个用于接收和返回类型的静态数据结构。我怎样才能使它灵活?,因为取决于要调用的 DB 函数,要返回并作为输入发送的数据结构

API返回的结构类似于

{
  "code": 200,
  "data": {
    "some": "value"
  },
  "status": "Correct..blabla"
}

发送到 API 的数据结构取决于要使用的模式 如果它被加密,请求正文将是二进制字符串

a37163b25ed49d6f04249681b9145f63f64d84a486e234fa397f134f8b25fd62f1e755e40c09da09f9900beea4b51fc638e7db8730945bd319600943e01d10f2512fa6ab335fb65de32fc2ee0a2150f7987ae0999ea5d8d09e1125c533e7803ba9118ee5aff124282149792a33dce992385969b9df2417613cd2b039bf6056998469dfb015eade9585cb160275ec83de06d027180818652c60c09ada1c98d6e9ed11df9da737408e14161ae00aaf9d4568a015dc6b6d267f1ee04638dd60e4007dc543524b83ca6b2752c5f21e9dfff3b15e6e55db8b9be9e8c07d64ccd1b3d44ce48cc3e49daee5ae1da5186d9ef6994ccf41dc86a4e289fdbab8ca4a397f929445c42f40268ebb2c3d8bcb80f9e844dba55020da665bce887bd237ae2699876e12cc0043b91578f9df2d76391d50fbf8d19b6969

如果没有加密就很普通JSON

{
  "one": "parameter"
}

我能想到的一个可能的解决方案是始终在请求和响应类型上使用类型 byte,我唯一要做的就是转换 JSON到二进制字符串,反之亦然?

我乐于接受建议。

根据您的需求和性能要求,如果您真的没有 protobuf 字段的任何其他用途,那么采用原始字节路由可能是明智的。如果这样做,您可能希望定义支持加密和未加密消息字段的消息类型,例如:https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto#L77