Size: a a a

GraphQL — русскоговорящее сообщество

2019 April 16

U

Uxname in GraphQL — русскоговорящее сообщество
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
А тут https://github.com/maticzav/graphql-shield#rules-on-input-types-or-arguments что происходит с аргументом? Он удаляется или просто блочится вся мутация?
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
если поле необязательно
источник

U

Uxname in GraphQL — русскоговорящее сообщество
блочится мутация
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Иными словами, если у мутации 3 необязательных аргумента, и один из аргументов не прошёл валидацию (по валидации содержимого или по роли), то блочится вся мутация.

Хотя иногда полезно всё-таки выполнить частично эту мутацию с 2 оставшимися аргументами, при этом выдать ещё ошибку, что с 3 аргументом произогла проблема.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
И интереснее становится, если аргумент не простой, а объект.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
часть полей в этом объекте может пройти проверку, а часть нет
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
когда аргумент является инпутом, то это объект
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
С partial response в GraphQL всё отлично, можно запретить читать определенные поля типа, а не весь тип целиком (вернётся data и errors в респонсе, причём в data будут те данные, которые можно читать, а те, что нельзя будут null).

А вот с partial mutation как-то сложно.
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Uxname
ну вообще идея такая, хз будет работать или нет, ща проверю
проверил, если удалить поле из аргументов - оно не попадает в мутацию
источник

U

Uxname in GraphQL — русскоговорящее сообщество
в общем надо решить задачу:
есть два объекта, rules и args,
они примерно совпадают, надо в тех местах где в rules переменная === false в этих же местах из args удалить переменные
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Uxname
в общем надо решить задачу:
есть два объекта, rules и args,
они примерно совпадают, надо в тех местах где в rules переменная === false в этих же местах из args удалить переменные
перебираем весь объект args, достаём имя ключа, ищём его в rules, если там false, удаляем?
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
объекты уже оба вычислены в этот момент?
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Алексей Родионов
перебираем весь объект args, достаём имя ключа, ищём его в rules, если там false, удаляем?
ну почти, перебираем объект рулз, если текущая переменная true - добавляем по её имени переменную из args  в result, и так рекурсивно по объекту, в конце
args = result
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Uxname
ну почти, перебираем объект рулз, если текущая переменная true - добавляем по её имени переменную из args  в result, и так рекурсивно по объекту, в конце
args = result
ну либо если переменная false: delete args[varName]
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Алексей Родионов
объекты уже оба вычислены в этот момент?
хз, пока считаем что да
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Uxname
ну почти, перебираем объект рулз, если текущая переменная true - добавляем по её имени переменную из args  в result, и так рекурсивно по объекту, в конце
args = result
> и так рекурсивно по объекту

Объект же может быть любой вложенности (в ключе ещё ключи, а уних ещё ключи)?
источник

U

Uxname in GraphQL — русскоговорящее сообщество
да
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
и 2 режима предусмотреть?

1. если хотя бы 1 в глубине false, то всё false
2. если что-то внутри false, то просто исключаем это
источник

U

Uxname in GraphQL — русскоговорящее сообщество
1 уже сделан в шилде, так что только 2й вариант
источник