Protocol buffers grpc/protobuffer询问特定字段

Protocol buffers grpc/protobuffer询问特定字段,protocol-buffers,grpc,grpc-java,protobuf-java,Protocol Buffers,Grpc,Grpc Java,Protobuf Java,GraphQL允许您请求特定字段,响应仅包含您请求的字段。例如: graphql查询类似于: { hero { name } } { hero { name friends { name } } } 将返回: { "data": { "hero": { "name": "R2-D2" } } } 其中,作为

GraphQL允许您请求特定字段,响应仅包含您请求的字段。例如: graphql查询类似于:

{
  hero {
    name
  }
}
{
  hero {
    name
    
    friends {
      name
    }
  }
}
将返回:

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}
其中,作为graphQl查询,类似于:

{
  hero {
    name
  }
}
{
  hero {
    name
    
    friends {
      name
    }
  }
}
将返回:

{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        {
          "name": "Luke"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia"
        }
      ]
    }
  }
}

gRPC中是否有类似的机制/库/模式可用于实现相同的功能?

IIUC,GraphQL只是在网络上传输(字符串)查询,由后端处理,生成结果,然后发送回客户端

我认为惯用的gRPC方法应该有不同的方法:

service服务{
rpc Hero(HeroRequest)返回(HeroResponse);
rpc好友(FriendsRequest)返回(FriendsResponse);
}
如果希望使用gRPC传输类似GraphQL的数据,可以将查询封装在请求中,像以前一样在后端处理GraphQL,然后将结果以protobuf消息的形式发送回客户端:

service服务{
rpc查询(QueryRequest)返回(QueryResponse);
}
方法查询请求{
字符串查询=1;
}

IIUC,GraphQL只是在网络上传输(字符串)查询,由后端处理,生成结果,然后发送回客户端

我认为惯用的gRPC方法应该有不同的方法:

service服务{
rpc Hero(HeroRequest)返回(HeroResponse);
rpc好友(FriendsRequest)返回(FriendsResponse);
}
如果希望使用gRPC传输类似GraphQL的数据,可以将查询封装在请求中,像以前一样在后端处理GraphQL,然后将结果以protobuf消息的形式发送回客户端:

service服务{
rpc查询(QueryRequest)返回(QueryResponse);
}
方法查询请求{
字符串查询=1;
}
在protobuf中类似。它是一个要保留的字段列表,因此第一个示例是路径:“hero.name”,第二个示例是路径:[“hero.name”、“hero.friends.name”]

它可能最常用于指定更新中应更改哪些字段。但它同样可以用于指定应返回的字段

服务器可以直接处理字段掩码(例如,仅使用SELECT SQL查询中列出的字段),也可以检索所有信息并过滤结果,只将请求的字段复制到新的proto消息中以返回到客户端。

与protobuf类似。它是一个要保留的字段列表,因此第一个示例是路径:“hero.name”,第二个示例是路径:[“hero.name”、“hero.friends.name”]

它可能最常用于指定更新中应更改哪些字段。但它同样可以用于指定应返回的字段

服务器可以直接处理字段掩码(例如,仅使用SELECT SQL查询中列出的字段),也可以检索所有信息并过滤结果,只将请求的字段复制到新的proto消息中以返回到客户端