Средство просмотра GraphQL для мутаций

#graphql #graphql-js

#graphql #graphql-js

Вопрос:

Является ли хорошей практикой иметь средство просмотра мутаций GraphQL? Теоретически это имеет смысл для меня, поскольку некоторые конечные точки мутации не должны быть возможны, если вы не вошли в систему и т.д.

Но когда я вижу примеры в Интернете, я вижу только реализацию средств просмотра GraphQL для запросов. Для мутаций я не вижу никакой реализации viewers. Например, в API GitHub нет средства просмотра поверх всех их мутаций.

Ответ №1:

viewer Поле не является хорошей практикой ни для мутаций, ни для запросов. Это остаток устаревшей платформы GraphQL от Facebook до того, как она была с открытым исходным кодом, которая не допускала аргументов в полях корневого запроса. Это означало, что все поля необходимо было переместить на один уровень ниже viewer .

Текущий способ выполнения аутентификации в GraphQL, по крайней мере, в реализации JavaScript, заключается в получении пользовательских данных на основе чего-то вроде заголовка HTTP и их включении context , как указано здесь: http://graphql.org/learn/authorization /

Поэтому нет причин делать средство просмотра для мутаций или для запросов. Большинство клиентов GraphQL не возражают, но одна ситуация, в которой может иметь смысл использовать его в запросах, — это если вы используете Relay 0.x, который унаследовал некоторые устаревшие ограничения GraphQL от Facebook. Надеюсь, будущая версия Relay устранит это требование.

Для получения дополнительного источника прочитайте этот комментарий от Ли Байрона, одного из первоначальных создателей GraphQL.

Комментарии:

1. Я не соглашусь с тем, что использование viewer — плохая практика. Большое количество данных во многих современных приложениях тесно связано с контекстом того, кто просматривает эти данные. Например. мои друзья на Facebook отличаются от ваших. В таком случае удобно иметь поле просмотра root, которое будет правильно ограничивать область подзапросов. Такие вещи, как поиск и т. Д., Также довольно часто связаны с контекстом того, кто ищет. Не могли бы вы предоставить какой-нибудь ресурс, в котором Relay говорит, что концепция viewer существует только из-за устаревших причин?

2. В более поздних версиях GraphQL существует понятие «контекст», которое является базовой вещью, позволяющей вам получать информацию о текущем пользователе. Следовательно, нет необходимости в том, чтобы это было поле в реальной схеме.

3. Вот комментарий Ли Байрона, создателя GraphQL, об этом: github.com/lucasbento/graphql-pokemon/issues/1#issue-184547046