GraphQL hide certain fields from a response

GraphQL hide certain fields from a response


0

I am completely new to GraphQL – apologies if this is a stupid question.

I have a Spring Boot application running GraphQL and have two endpoints as defined in my schema below:

type Query {
  userById(id: ID): User
  getMe: User
}

type User {
    id: ID!
    email: String!
    firstName: String!
    lastName: String!
}

getMe is an authorised endpoint and can only be accessed with a JWT authorization bearer. This returns the currently logged in user.

userById is open and allows a query to pull user information from an ID.

I would like to limit the type User for the userById query to remove the email field as (for this example) I don’t want anyone to be able to query for someone’s email address.

I could accomplish this by creating another User type (EG PublicUser) which doesn’t contain the email field, however this seems incorrect to me. See an example of this implementation below:

type Query {
  userById(id: ID): PublicUser
  getMe: PrivateUser
}

interface User {
  id: ID!
  firstName: String!
  lastName: String!
}

type PrivateUser implements User {
  id: ID!
  email: String!
  firstName: String!
  lastName: String!
}

type PublicUser implements User {
  id: ID!
  firstName: String!
  lastName: String!
}

What is the standard way to accomplish this in GraphQL? I am using a Spring Boot GraphQL implementation, however an answer outlining the general practice used will set me in the right direction.

Thanks


Load 5 more related questions


Show fewer related questions

0



Leave a Reply

Your email address will not be published. Required fields are marked *