80 votes

La connexion ne doit-elle pas être une requête dans GraphQL?

Dans le tutoriel sur l'authentification GraphQL, le login est une mutation :

 type Mutation {
  post(url: String!, description: String!): Link!
  signup(email: String!, password: String!, name: String!): AuthPayload
  login(email: String!, password: String!): AuthPayload
}
 

La connexion ne doit-elle pas être une requête depuis:

  1. L'opération n'a aucun effet secondaire sur le serveur.
  2. Le but est d' interroger un jeton.

Est-ce que j'ai râté quelque chose ?

152voto

Daniel Rearden Points 8834

Dans le cadre de cet exemple, login doit être une Requête au lieu d'une Mutation en raison de son programme de résolution n'a pas d'effets secondaires, au moins selon la spécification. Cependant, il ya un couple de raisons que vous ne verrez probablement pas le fait le sauvage:

  • Si vous êtes à la mise en œuvre de l'authentification, vous aurez probablement envie de vous connecter à votre compte de son activité, soit par le maintien de certaines données sur la connexion/déconnexion des événements ou, au moins, y compris une sorte de "dernière connexion" champ sur le compte de l'enregistrement. La modification des données serait un effet secondaire.

  • Une convention a évolué, qui traite toutes les opérations qui résultent des actions de l'utilisateur comme les Mutations, indépendamment des effets secondaires. Vous voyez cela avec react-apollo, par exemple, où les composants de Requête d'incendie associés requête sur le mont, tout en Mutation composants exposez simplement une fonction qui peut être appelée à feu de cette requête. Si vous prévoyez sur l'utilisation d'Apollon côté client, il est utile de réfléchir à ce genre de fonctionnalités client lors de la conception de votre schéma.

  • Les Mutations sont a couru de manière séquentielle, alors que les requêtes sont lancées simultanément. Cela signifie qu'il serait prévisible à feu d'une connexion mutation et un ou plusieurs autres mutations après, dans le même appel, vous permettant d'utiliser une authentification contexte pour les appels suivants. On ne peut pas être dit pour les requêtes -- si login est une requête et vous pouvez inclure d'autres requêtes avec elle dans la même opération, ils vont tous commencer à résoudre en même temps.

En dehors de la façon dont ils sont exécutés (séquentielle vs simultanément), sur le côté serveur, les requêtes et les mutations sont effectivement interchangeables. Vous pourriez avoir des requêtes avec des effets secondaires et des mutations, sans effets secondaires. Vous devriez coller avec les conventions, mais je pense que parfois il y a des raisons valables de l'endroit où vous avez à jeter ces conventions par la fenêtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X