web-dev-qa-db-fra.com

Comment exposer un champ graphql avec un nom différent

J'explore GraphQL et j'aimerais savoir s'il existe un moyen de renommer le champ de réponse, par exemple, j'ai un POJO avec ces champs

class POJO {
  Long id;
  String name;
}

Requête GraphQL:

type POJO {
  id: Long
  name: String
}

Ma réponse est quelque chose comme ça

{
  "POJO" {
    "id": 123,
    "name": "abc"
  }
}

Puis-je renommer le champ du nom avec quelque chose comme UserName afin que ma réponse soit en dessous

{
  "POJO" {
    "id": 123,
    "userName": "abc"
  }
}
6
Amit Kumar

Vous pouvez utiliser GraphQL Aliases pour modifier des clés individuelles dans la réponse JSON.

Si c'est votre requête initiale

query {
  POJO {
    id
    name
  }
}

vous pouvez introduire un alias GraphQL userName pour le champ name comme suit:

query {
  POJO {
    id
    userName: name
  }
}

Vous pouvez également utiliser des alias GraphQL pour utiliser le même champ de requête ou de mutation plusieurs fois dans la même opération GraphQL. Ceci est particulièrement intéressant lors de l'utilisation de paramètres de champ:

query {
  first: POJO(first: 1) {
    id
    name
  }

  second: POJO(first: 1, skip: 1) {
    id
    name
  }
}
17
marktani

La question est: comment créez-vous le schéma en premier lieu? Il n'y a pas de connexion intrinsèque entre les types Java et GraphQL - ils sont complètement indépendants les uns des autres, sauf si vous les corrélez. Ainsi, vous pouvez nommer les champs comme vous le souhaitez dans le schéma et créer un résolveur (DataFetcher) qui récupère la valeur n'importe où (ainsi que tout champ POJO).

Si vous utilisez un outil pour générer le schéma à partir de types Java ( graphql-Java-annotations , graphql-spqr etc), utilisez les fonctionnalités de cet outil pour piloter le mappage. Les deux outils mentionnés permettent de personnaliser le mappage via des annotations. GraphQL-SPQR permet la même chose via une configuration externe.

Si vous clarifiez davantage votre question, je pourrai vous donner une réponse plus précise.

0
kaqqao

On dirait que l'annotation GraphQLName peut aider. 

Exemple tiré de documentation : "De plus, @GraphQLName peut être utilisé pour remplacer le nom du champ. Vous pouvez utiliser @GraphQLDescription pour définir une description."

Ceux-ci peuvent également être utilisés pour les paramètres de champ:

public String field(@GraphQLName("val") String value) {
  return value;
}
0
Alex.Gri