簡體   English   中英

即使缺少所需架構的一部分,GraphQL POST 也會通過

[英]GraphQL POST passes even though parts of required schema are missing

我有一個這樣定義的突變:

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

根據我的理解,對[OptionInput!]!使用兩個引號[OptionInput!]! 意味着數組是必需的,並且 OptionInput 類型的對象也是必需的。

但是,從我的客戶端,我可以在 Options 數組中沒有任何對象的情況下成功 POST:

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!
  }

正如文檔所述,如果列表中的類型為非空:

這意味着列表本身可以為空,但不能有任何空成員。

這意味着空數組仍然有效,但任何項本身為空的數組則無效。

[OptionInput]表示所有這些都是有效的:

  • 空值
  • [{},空值]
  • [{},{}]
  • []

[OptionInput!]表示所有這些都是有效的:

  • 空值
  • [{},{}]
  • []

[OptionInput]! 意味着所有這些都是有效的:

  • [{},空值]
  • [{},{}]
  • []

[OptionInput!]! 意味着所有這些都是有效的:

  • [{},{}]
  • []

如果您需要阻止客戶端提供空數組,則需要檢查解析器中的參數是否為空數組,然后拋出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM