GraphQL POST проходит, даже если части требуемой схемы отсутствуют

1

У меня есть мутация, определяемая как таковая:

# POST a new Translation
    createTranslation(
      name: String!
      options: [OptionInput!]!
    ): Translation

По моему [OptionInput!]!, используя две кавычки для [OptionInput!]! означает, что массив НЕОБХОДИМО, и объект типа OptionInput также НЕОБХОДИМО.

Однако, с моей стороны, я могу успешно выполнить POST без каких-либо объектов в массиве Options:

const createTranslation = gql'
  mutation createTranslation(
    $name: String!,
    $options: [OptionInput!]!
  ) {
    createTranslation(
      name: $name,
      options: $options
    ) {
      _id
    }
  }
';

Несмотря на то, что я ожидаю ошибок проверки из коробки (ответ образца):

{
  "data": {
    "translations": [
      {
        "_id": "59fa1b7a3d4d4805ed6f7539",
        "name": "Sample Translation Name!!!",
        "options": []
      }
    ]
  }
}

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

PS: Здесь мой вход OptionInput

input OptionInput {
    text: String!
    value: String!
  }
Теги:
ecmascript-6
graphql

1 ответ

1
Лучший ответ

Как указано в docs, если тип внутри списка не равен null:

Это означает, что сам список может быть нулевым, но он не может иметь никаких нулевых членов.

Это означает, что пустой массив все еще действителен, но массив, в котором каждый из элементов является нулевым, не является.

[OptionInput] означает, что все они действительны:

  • ноль
  • [{},ноль]
  • [{}, {}]
  • []

[OptionInput!] Означает, что все они действительны:

  • ноль
  • [{}, {}]
  • []

[OptionInput]! означает, что все они действительны:

  • [{},ноль]
  • [{}, {}]
  • []

[OptionInput!]! означает, что все они действительны:

  • [{}, {}]
  • []

Если вам нужно предотвратить предоставление клиентом пустого массива, вам нужно будет проверить, является ли аргумент пустым массивом внутри вашего распознавателя, а затем просто выкидывает ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню