1

次の GraphQL スキーマがあります。

interface Node {
  id: ID!
}

type User : Node {
  id: ID!
  name: String!
  tasks: [Task]
}

type Task : Node {
  id: ID!
  day: Int!
  description: String!
}

type Viewer {
  users: [User]
}

type Query {
  viewer: Viewer
}

基本的に、すべてのユーザーはタスクのリストを持つことができます。この問題は、次のような応答を得るためにすべてのタスクのリストをフェッチする必要があるときに発生します。

tasks: [{
  day: 1,
  user: {
    name: "John"
  }
}, {
  day: 2,
  user: {
    name: "Jane"
  }
}]

そのようなフェッチを許可するには、スキーマをどのように編集すればよいですか?

4

1 に答える 1

2

すべてのタスクのリストを取得できるようにするには、Viewer のプロパティとして追加します。

type Viewer {
  users: [User]
  tasks: [Task]
}

usersにフィールドを追加しますTask

type Task : Node {
  id: ID!
  day: Int!
  description: String!
  users: [User]
}

更新されたスキーマを使用すると、すべてのユーザーとタスクのリストを照会できます。

{
  viewer {
    users {  // all users
      name
      tasks {  // user's tasks
        description
      }
    }
    tasks {  // all tasks
      day
      users {  // task's users
        name
      }
    }
  }
}

また、すべてのタスク (またはユーザー) を一度にフェッチする代わりに、ページネーションを使用する必要があります。Relay で GraphQL サーバーを使用する予定の場合は、ユーザー/タスクをリストとしてではなく、エッジを使用した接続として定義します。https://facebook.github.io/relay/docs/graphql-connections.html#contentを参照してください

于 2015-09-23T11:59:50.610 に答える