除了分页数据之外,是否可以扩展graphql响应?

时间:2016-10-30 16:08:40

标签: express response graphql

在GraphQL中,响应通常如下所示。

{
  "data": [{
    "id": 1,
    "username": "Jon Snow",
    "email": "crow@northofthew.all",
    "age": 20
  }, {
    "id": 2,
    "username": "Tyrion Lannister",
    "email": "drunk@i.mp",
    "age": 34
  }, {
    "id": 3,
    "username": "Sansa Stark",
    "email": "redhead@why.me",
    "age": 17
  }]
}

是否可以将元数据添加到您的回复中,例如像这样的分页。

{
  "pagination": {
    "total": 14,
    "count": 230,
  },
  "data": [{
    "id": 1,
    "username": "Jon Snow",
    "email": "crow@northofthew.all",
    "age": 20
  }, {
    "id": 2,
    "username": "Tyrion Lannister",
    "email": "drunk@i.mp",
    "age": 34
  }]
}

我正在使用express-graphql并且目前将这些分页放到自定义响应标头中,这很好,但它可以更好。由于GraphQL响应已经包含了"数据",因此添加更多"数据"并不是很奇怪。它的回应。

1 个答案:

答案 0 :(得分:1)

根据作为无效GraphQL响应的规范,重新强化@CommonsWare已经声明的内容。关于分页,Relay有自己的分页方法connections,但实际上,其他几种方法是可能的,甚至更适合某些情况(连接不是银弹)。

我希望通过补充说明GraphQL的层次结构性质使相关数据处于同一水平来增强已经说过的内容。一个例子值得千言万语,所以在这里:

query Q {
  pagination_info { # what is this info related to? completely unclear
    total
    count
  }
  user {
    friends {
      id
    }
  }
}

,而不是...

query Q {
  user {
    friends {
      pagination_info { # fairly obvious that this is related to friends
        total
        count
      }
      friend {
        id
      }
    }
  }
}