Подтвердить что ты не робот

В чем смысл поля зрителя в GraphQL?

Какова цель поля корневого запроса viewer в GraphQL?

Основываясь на этой статье, viewer может использоваться для принятия параметра токена, чтобы мы могли видеть, кто в настоящий момент зарегистрирован.

Как мне его реализовать?

4b9b3361

Ответ 1

Назначение поля запроса viewer root

viewer не является чем-то графическим или ретрансляционным. Большинство веб-приложений обслуживают некоторые цели своих пользователей или зрителей. Сущность верхнего уровня для моделирования различных данных, обслуживаемых пользователю, может быть названа как viewer. Вы также можете назвать его user. Например, Пример списка реле > имеет поле запроса viewer:

viewer: {
  type: GraphQLUser,
  resolve: () => getViewer(),
},

Мы также можем обойтись без viewer. Например, Пример списка реле > не имеет поля запроса viewer root.

Короче говоря, наличие этого viewer в качестве корневого поля запроса схемы GraphQL позволяет нам предоставлять данные на основе текущего пользователя.

Реализация: использование маркера аутентификации вместе с программой просмотра

Мой ответ следует тому, что уже описано в вашей статье. Шаги:

  • На стороне сервера создайте мутацию, чтобы получить токен аутентификации. Назовите его LoginMutation. Ввод в эту мутацию - это учетные данные пользователя, а выход - токен аутентификации.

  • На стороне клиента, если вы используете this и для деталей.

    Джонас Хелфер написал статью из двух статей об этом, которую вы найдете очень полезной: Часть 1, Часть 2

Ответ 2

Идея, лежащая в основе поля viewer (шаблон проектирования), состояла в том, чтобы сгруппировать поля запросов верхнего уровня, которые относятся только к текущему вошедшему в систему пользователю. Например:

# EXAMPLE 1

quer {
  viewer {
    stories { ... } # the list of published stores as well as drafts (current user)
  }

  stories { ... }   # the list of published stories (all users)
}

Эти текущие зарегистрированные пользовательские данные были либо объединены в само поле viewer, либо вложены в него:

# EXAMPLE 2

query {
  viewer {
    id
    email
    displayName
    stories { ... }
  }
}

# EXAMPLE 3

query {
  viewer {
    me { id email displayName }
    stories { ... }
  }
}

Все три приведенных выше примера можно упростить, полностью удалив поле viewer и сохранив те же функции (рекомендуется):

query {
  # The currently logged in user or NULL if not logged in
  me {
    id
    email
    displayName
  }

  # Published stories only (all users)
  stories {
    ...
  }

  # Published stories as well as drafts (the current user)
  stories(drafts: true) {
    ...
  }
}

Вы можете найти полный пример в React Starter Kit, который можно использовать либо как эталонный проект, либо как начальный шаблон/шаблон для новых разработок. Смотрите src/server/schema.js.