Как создать правила проверки из схемы GraphQL - PullRequest
1 голос
/ 03 апреля 2020

Как я могу преобразовать простую схему GraphQL, к которой я могу получить доступ к серверной части сервера путем импорта, а клиентскую часть по запросу, в правила проверки?

Я могу посмотреть, как я могу сделать это для enums, скажем, у меня есть заголовок:

  enum Title {
    Mr, Ms, Mrs, Dr
  }

Я мог получить доступ к возможным значениям, запросив

  __type (name: "Title") {
    name
    enumValues {
      name
    }
  }

И теперь я могу создать раскрывающийся список на клиенте или проверки на сервере, но как мне кодировать и получить доступ, например, к минимальной / максимальной длине строкового поля? Или минимальное / максимальное значение для числа?

Нужно ли добавлять пользовательский тип для каждого поля? Или есть лучший способ?


[править] в ответ на ответ Дэниела:

Я использую yup для проверки, которая является отличной библиотекой, но, например, если определенное поле было обязательное для gql InputType, как мне получить это в схеме yup?

И как мне использовать эту схему yup на внешнем интерфейсе? В идеале я хотел бы сериализовать его, отправить его клиенту и восстановить там валидацию.

Единственный другой способ, которым я могу придумать, - это поделиться кодом, но тогда мне нужно пересобрать и заново - Развертывайте клиент каждый раз, когда меняется схема, что, конечно, не может быть и речи: /

1 Ответ

1 голос
/ 03 апреля 2020

Существует несколько видов проверки данных, например:

  • Тип данных (это значение является строкой или числом?)
  • Диапазон (это значение в этом диапазон значений?)
  • Ограничение (соответствует ли это значение этому выражению регулярного выражения?)
  • Согласованность (дата окончания после даты начала?)
  • Ссылка (соответствует ли предоставленный идентификатор ссылается на сущность, которая действительно существует?)

Строго типизированные языки, такие как GraphQL, могут действительно обеспечивать только проверку типа данных. Ваша служба GraphQL может выполнять другие виды проверки (через ваш источник данных, ваши модели данных, пользовательские скаляры GraphQL и т. Д. c.), Однако, только информация type может быть подвергнута самоанализу со стороны службы. Самоанализ не является подходящим инструментом для передачи другим логинам проверки c вашему клиенту.

Если вы используете Node.js в бэкэнде, и ваша цель - поделиться логи проверки c между вашим бэкэндом и В таком случае лучше всего использовать библиотеку типа yup или joi .

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