中继和GraphQL接口是什么,如何工作的?
我们在GraphQL中定义了如下类型:中继和GraphQL接口是什么,如何工作的?,graphql,relayjs,Graphql,Relayjs,我们在GraphQL中定义了如下类型: const GraphQLTodo = new GraphQLObjectType({ name: 'Todo', fields: { id: globalIdField('Todo'), text: { type: GraphQLString, resolve: (obj) => obj.text, }, complete: { type: GraphQLBoolean
const GraphQLTodo = new GraphQLObjectType({
name: 'Todo',
fields: {
id: globalIdField('Todo'),
text: {
type: GraphQLString,
resolve: (obj) => obj.text,
},
complete: {
type: GraphQLBoolean,
resolve: (obj) => obj.complete,
},
},
interfaces: [nodeInterface], // what is this?
});
我已经读到了GraphQLInterfaceType,当类型基本相同但某些字段不同时,它更适合,这有点像外键吗
在中继中,我们使用NodeDefinition获得nodefield和nodeInterface:
const {nodeInterface, nodeField} = nodeDefinitions(
(globalId) => {
const {type, id} = fromGlobalId(globalId);
if (type === 'Todo') {
return getTodo(id);
} else if (type === 'User') {
return getUser(id);
}
return null;
},
(obj) => {
if (obj instanceof Todo) {
return GraphQLTodo;
} else if (obj instanceof User) {
return GraphQLUser;
}
return null;
}
);
文档和示例仅在接口上使用了一个:[]//它是一个数组。但是什么时候我需要使用很多接口呢?我只是对它是什么感到困惑,我读了很多关于它的书,不知道我的理解是否正确,只是似乎无法把它放在我的脑海中GraphQLInterfaceType是GraphQL实现多态性的一种方式,即由多个对象类型组成的类型。例如,假设有两种基本对象类型:Post和Comment。假设您想要一个字段,该字段可以同时获得评论和帖子的列表。很方便,这两种类型都有一个id、文本和作者字段。这是接口类型的完美用例。接口类型是一组共享字段,它可以由拥有这些字段的任何对象类型实现。因此,我们创建了一个编写的接口,并说注释和Post实现了这个接口。通过将此编写的类型放置在GraphQL字段中,该字段可以解析POST或COMMENT或这两种类型的异构列表
但是,wait、Post和Comment接受一系列接口。我可以在这里传递多个接口。为什么?由于实现接口的要求是拥有该接口中的所有字段,因此任何对象类型都没有理由不能实现多个接口。从您的示例中可以看出,中继中的节点接口只需要id。因为我们的帖子和评论都有id,所以它们可以实现节点和作者。但许多其他类型可能会实现Node,这些Node不是Authored的一部分
这使对象类型更易于重用。如果将接口分配给字段而不是对象类型,则只要坚持使用这些商定的接口,就可以轻松地向模式中的字段添加新的可能类型