Разве логин не должен быть запросом в GraphQL? - PullRequest
0 голосов
/ 05 мая 2018

В учебнике по аутентификации GraphQL login - это Мутация :

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

Не должен ли логин быть Запрос , поскольку:

  1. Операция не имеет побочных эффектов на сервере.
  2. Цель - запрос токена.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 05 мая 2018

В контексте этого примера, login должен быть Запросом, а не Мутацией, потому что его преобразователь не имеет побочных эффектов, по крайней мере, в соответствии со спецификацией. Тем не менее, есть несколько причин, по которым вы, вероятно, не увидите, что сделано в дикой природе:

  • Если вы внедряете аутентификацию, вы, вероятно, захотите регистрировать активность учетной записи своих пользователей, либо сохраняя некоторые данные о событиях входа / выхода из системы, либо, по крайней мере, добавляя какое-либо поле «последний вход в систему» ​​в запись аккаунта. Изменение этих данных будет побочным эффектом.

  • Разработано соглашение, которое рассматривает любые операции, возникающие в результате действий пользователя, как мутации, независимо от побочных эффектов. Это видно, например, в react-apollo, где компоненты Query запускают связанный запрос при монтировании, в то время как компоненты Mutation просто предоставляют функцию, которая может быть вызвана для запуска этого запроса. Если вы планируете использовать клиентскую часть Apollo, при разработке схемы стоит учитывать такие возможности клиента.

  • Мутации запускаются последовательно, а запросы выполняются одновременно. Это означает, что было бы предсказуемо запустить мутацию входа в систему и одну или несколько других мутаций после него в рамках одного и того же вызова, что позволит вам использовать аутентифицированный контекст для последующих вызовов. То же самое нельзя сказать о запросах - если login является запросом, и вы включаете в него другие запросы в одной и той же операции, они все начнут разрешаться одновременно.

Помимо того, как они выполняются (последовательно и одновременно), на стороне сервера запросы и мутации эффективно взаимозаменяемы. У вас могут быть запросы с побочными эффектами и мутациями без побочных эффектов. Вы, вероятно, должны придерживаться соглашений, но я думаю, что иногда есть веские причины, по которым вам, возможно, придется выбросить эти соглашения в окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...