我正在为 3 种类型(比如说学生、同学和宠物)设置端点,其中学生有很多同学和很多宠物。我想出了2个选项:
第一个是创建一个 FriendsInterface 并让 Classmate 和 Pet 实现该接口,然后将它们全部返回为 ListGraphType
第二个是为这些类型创建一个连接:ClassmateConnection 和 PetConnection
我描述的第一种和第二种方法有什么区别。
- 创建连接是否更好(因为我可以看到那些允许在 API 中分页)?
- 第二种方法是否会带来更好的 GraphQL 模式,其中每个 GraphQL 节点通过边连接到另一个节点。
我尝试创建一个 ListGraphType,因为这是我可以在示例中看到的。
但是,没有关于如何创建连接的示例,并且我一直遇到以下错误:
Error message:
Error: Request failed with status code 400
at e.exports (http://localhost:3000/bundle.js:12:13653)
at e.exports (http://localhost:3000/bundle.js:44:1280)
at XMLHttpRequest.p.onreadystatechange (http://localhost:3000/bundle.js:12:12667)
第一种方法
public StudentType (MyData data) {
Name = "Student";
Description = "A curios creature in a giant universe.";
Field (d => d.Id).Description ("The id of the student.");
Field<ListGraphType<FriendInterface>> (
"friends",
resolve : context => data.GetFriends (context.Source)
);
}
第二种方法(创建连接)
public StudentType (MyData data) {
Name = "Student";
Description = "A curios creature in a giant universe.";
Field (d => d.Id).Description ("The id of the student.");
Connection<ListGraphType<ClassmateType>> ()
.Name ("classmates")
.Description ("classmate test")
.Resolve (context => data.GetClassmates (context.Source));
Connection<ListGraphType<PetType>> ()
.Name ("classmates")
.Description ("pet test")
.Resolve (context => data.GetPets (context.Source));
}
public ClassmateType (MyData data) {
Name = "Classmate";
Description = "A misunderstood creature in a giant universe.";
Field (d => d.Id).Description ("The id of the classmate.");
}
public PetType (MyData data) {
Name = "Pet";
Description = "An animal creature in a giant universe.";
Field (d => d.Id).Description ("The id of the pet.");
}
在第一种方法中,这是我要发送的查询:
student(studentID: "1") {
id
name
friends {
id
}
}
在第二种方法中,查询如下:
student(studentID: "1") {
id
name
classmateConnection {
classmates {
id
}
}
petConnection {
pets {
id
}
}
}