Reputation: 104
GraphQL lets you ask for specific fields, the response contains only the fields that you had asked for. For example: a graphql query like:
{
hero {
name
}
}
will return:
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
where as a graphQl query like:
{
hero {
name
friends {
name
}
}
}
would return:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{
"name": "Luke"
},
{
"name": "Han Solo"
},
{
"name": "Leia"
}
]
}
}
}
Is there a similar mechanism/library/pattern that can be used in gRPC to achieve the same?
Upvotes: 3
Views: 2225
Reputation: 26394
FieldMask is similar in protobuf. It is a list of fields to retain, so the first example would be paths: "hero.name"
and the second would be paths: ["hero.name", "hero.friends.name"]
.
It is probably most frequently used to specify which fields should be changed in an update. But it can equally be used to specify the fields that should be returned.
The server can either process the FieldMask directly (e.g., only using the listed fields in a SELECT SQL query), or it can retrieve all the information and filter the result using FieldMaskUtil.merge() to copy just the requested fields into a new proto message to return to the client.
Upvotes: 4