Size: a a a

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

2020 June 21

A1

Art 141 in GraphQL — русскоговорящее сообщество
Алексей Родионов
В примере вообще custom scalar Integer вместо Int:

type Foo {
 bitMask: Integer @numberValue(
   oneOf: [ 1, 2, 4, 8, 16, 32, 64, 128 ]
 )
}
Integer вот это ещё более странно. Зачем этот скаляр, когда есть Int. Или это типа мы назовём Integer но будем думать, что это Int или Float. Тогда и называйте Number...
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Ты, когда директиву будешь делать, у тебя всё равно свой кастомный скаляр под капотом получится, типа такого:
источник

АР

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

АР

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

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
И вот parseValue и parseLiteral у тебя могут быть для разных типов.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Алексей Родионов
Ты, когда директиву будешь делать, у тебя всё равно свой кастомный скаляр под капотом получится, типа такого:
У меня не js. Так что думаю не так будет.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Art 141
У меня не js. Так что думаю не так будет.
Я и в JS директивы не советую.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
У меня они как middleware работают и новых типов не генерят.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Делать нужно в коде. В том же TypeScript и JS (с включенными экспериментальным флагом) есть декораторы, если хочется красиво не в резолвере проверку писать, а обернуть класс или проперти. Даже синтаксис с '@'.
источник

АР

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

A1

Art 141 in GraphQL — русскоговорящее сообщество
Алексей Родионов
Делать нужно в коде. В том же TypeScript и JS (с включенными экспериментальным флагом) есть декораторы, если хочется красиво не в резолвере проверку писать, а обернуть класс или проперти. Даже синтаксис с '@'.
Ты про то, что из схемы вынести и в коде запрятать?
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Art 141
Ты про то, что из схемы вынести и в коде запрятать?
Да. Директивы довольно ограничены, не гибки. Только не в каждом резолвере в код вставлять проверку, а сделать красиво и портативно (декоратор, миксин или мидлварю).
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Я как раз хочу максимально явно в схеме описать проверки. Чтобы фронт тоже понимал как это всё проверяется хотя бы на базовом уровне. Сколько символов минимально может быть в поле, какие значения недопустимы и тд.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Проверки в самом коде уже умею красиво оборачивать, но фронту то это помогает.
источник

Sergey Фrolov in GraphQL — русскоговорящее сообщество
Art 141
Я как раз хочу максимально явно в схеме описать проверки. Чтобы фронт тоже понимал как это всё проверяется хотя бы на базовом уровне. Сколько символов минимально может быть в поле, какие значения недопустимы и тд.
Может просто фронту правильно сгенерировать типы?
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Art 141
Я как раз хочу максимально явно в схеме описать проверки. Чтобы фронт тоже понимал как это всё проверяется хотя бы на базовом уровне. Сколько символов минимально может быть в поле, какие значения недопустимы и тд.
А ты уверен, что эти директивы попадут с инстроспекцией вообще на клиент и там ты их сможешь нормально без костылей считать?
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Sergey Фrolov
Может просто фронту правильно сгенерировать типы?
Как типы помогут проверки сделать? Например на длину строки.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Ты можешь в комментарии к полю передать все constraints.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Алексей Родионов
А ты уверен, что эти директивы попадут с инстроспекцией вообще на клиент и там ты их сможешь нормально без костылей считать?
Уверен, что интроспекцией не попадут. У нас это часть документации и главный механизм согласования бэка. фронта и мобилки.
источник

A1

Art 141 in GraphQL — русскоговорящее сообщество
Алексей Родионов
Ты можешь в комментарии к полю передать все constraints.
А потом на беке мучаться и парсить комментарии? Ну такое себе, когда язык позволяет так проверки описать.
источник