即使缺少所需架构的部分,GraphQL POST 也会通过
Posted
技术标签:
【中文标题】即使缺少所需架构的部分,GraphQL POST 也会通过【英文标题】:GraphQL POST passes even though parts of required schema are missing 【发布时间】:2018-04-14 04:43:46 【问题描述】:我有一个这样定义的突变:
# POST a new Translation
createTranslation(
name: String!
options: [OptionInput!]!
): Translation
据我了解,[OptionInput!]!
means that an array is REQUIRED, and an object of the type OptionInput is also REQUIRED. 使用两个引号
但是,从我的客户端,我可以在 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!
【问题讨论】:
【参考方案1】:如文档所述,如果列表中的类型为非空:
这意味着列表本身可以为空,但不能有任何 空成员。
这意味着空数组仍然有效,但其中任何项目本身为空的数组则无效。
[OptionInput]
表示所有这些都有效:
[OptionInput!]
表示所有这些都有效:
[OptionInput]!
表示所有这些都有效:
[OptionInput!]!
表示所有这些都有效:
如果您需要阻止客户端提供空数组,则需要检查解析器中的参数是否为空数组,然后抛出错误。
【讨论】:
以上是关于即使缺少所需架构的部分,GraphQL POST 也会通过的主要内容,如果未能解决你的问题,请参考以下文章
Nestjs graphql 上传错误:缺少 POST 正文。你忘记使用 body-parser 中间件了吗?
为啥即使我们尝试获取数据而不是更新/提交新数据,GraphQL 也会查询 POST 请求?
无法在 Next.js 应用程序中使用 Apollo-client GraphQL 上传文件:缺少 POST 正文