在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响应已经用"data"包装了,所以在响应中添加更多的"data"并不奇怪。
加强@CommonsWare已经声明的内容,根据规范,这将是无效的GraphQL响应。关于分页,Relay有自己的分页方法,称为连接,但实际上,还有其他几种可能的方法,甚至在某些情况下更适合(连接不是灵丹妙药)。
我想通过添加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
}
}
}
}