1

我正在为 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
        }
    }
}
4

0 回答 0