GraphQL类型定义中如何配置字段返回数组格式
GraphQL 数组类型字段配置方案
GraphQL 中通过方括号[目标类型]的语法定义数组类型,非空标识!的标注位置不同,对应的校验规则也不同,具体调整方式如下:
1. 调整单个产品的类型定义
当前定义的GetAllProducts实际对应单个产品的实体结构,命名存在语义混淆,建议重命名为Product更易维护,同时新增images字符串数组字段:
type Product { id: ID! title: String description: String userId: Int featured: Int isFree: Boolean isBlocked: Boolean instantBuy: Boolean groupsId: String # 图片链接字段:字符串数组格式 images: [String] }
如果要沿用原有命名GetAllProducts作为单个产品类型,直接在类型内部新增images: [String]字段即可。
2. 配置根查询字段的返回类型
期望getAllProducts接口返回产品对象数组,因此根Query下对应字段的返回值不能是单个产品类型,需要标记为产品类型的数组:
type Query { # 返回值用[Product]包裹,标识返回Product对象组成的数组 getAllProducts: [Product] }
数组非空规则说明
可以根据业务的实际返回规则,调整非空标识!的位置,不同写法的约束如下:
[String]:images字段可以返回null,返回数组时数组内允许存在null值,完全匹配给出的示例结构[String!]:images字段可以返回null,返回数组时数组内每一项都必须是合法字符串,不允许为null[String]!:images字段必须返回数组(不能为null,无数据时返回空数组),数组内允许存在null值[String!]!:images字段必须返回数组,数组内每一项都必须是合法字符串,不允许为null
同理查询字段getAllProducts也可以根据业务需求调整非空约束,比如要求接口永远返回数组、不返回null,就可以写为getAllProducts: [Product]!。
内容的提问来源于stack exchange,提问作者Manimaran
相关产品推荐
相关产品推荐

