3

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?

spyr03
  • 864
  • 1
  • 8
  • 27
Sanath.usk
  • 84
  • 5

1 Answers1

4

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.

Eric Anderson
  • 24,057
  • 5
  • 55
  • 76