GraphQL字符串列表语法及GraphQLObjectType中networks字段编码问询
如何在GraphQLObjectType中定义字符串列表类型的
networks字段 作为GraphQL新手,确实容易被各种关联节点的示例带偏,其实纯字符串列表的处理非常直接,我来一步步给你讲清楚:
1. 核心概念:GraphQL中的列表类型
在GraphQL里,列表类型是通过GraphQLList包装基础类型来定义的,字符串对应的基础类型是GraphQLString,所以字符串列表的类型就是new GraphQLList(GraphQLString)。
2. 完整代码示例(基于GraphQL.js)
假设你已经在使用graphql包,先导入需要的类型:
const { GraphQLObjectType, GraphQLString, GraphQLList } = require('graphql');
然后在你的GraphQLObjectType定义中添加networks字段:
// 示例:定义一个包含networks字段的对象类型 const YourTargetType = new GraphQLObjectType({ name: 'YourTarget', fields: () => ({ // 其他已有的字段示例 id: { type: GraphQLString }, title: { type: GraphQLString }, // 重点:networks字段的定义 networks: { type: new GraphQLList(GraphQLString), description: '从HTTP响应获取的字符串列表', // resolve函数:直接返回数据源中的networks数组即可 resolve: (parent) => parent.networks // 这里的parent就是你从HTTP响应拿到的JSON对象片段,直接取它的networks属性 } }) });
3. 对应的查询示例
当你在查询中请求networks字段时,写法和普通字段一样:
query GetTargetData { yourTarget { id title networks } }
返回的结果会和你的原始JSON结构对应,比如:
{ "data": { "yourTarget": { "id": "abc123", "title": "Sample Data", "networks": ["ethereum", "polygon", "solana"] } } }
4. 额外:如果你用SDL(Schema定义语言)
如果是用更简洁的SDL写法,字符串列表的定义更直观:
type YourTarget { id: String title: String # 可选:添加!表示非空约束,根据你的数据情况决定 networks: [String] # 允许列表为空或包含null元素 # networks: [String!]! # 列表本身不能为null,且每个元素都是非空字符串 }
这样就完全匹配你从HTTP响应拿到的字符串数组类型啦~
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

