Sanath.usk
Sanath.usk

Reputation: 104

grpc/protobuffer ask for specific fields

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

Answers (1)

Eric Anderson
Eric Anderson

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

Related Questions