我有一个使用Apollo Server返回GraphQL响应的模拟服务器。查询之一是获取teams
,该数组具有metrics
的数组(请参见下面的架构):
const mocks = {
Query: () => ({
teams: (/*parent, args, context, info*/) => teamsFixture,
}),
};
const graphServer = new ApolloServer({ typeDefs: schema, mocks });
graphServer.applyMiddleware({ app });
我的查询曾经是(已编辑的字段):
teams {
bpxId
metrics {
timestamp
}
}
真正的(java)服务器已对此进行了更改,以允许我仅查询(中继样式)指标数组中的第一项,因为它没有性能:
teams {
bpxId
metrics(first: 1) {
edges {
node {
timestamp
}
}
}
}
响应形状如下:
metrics: {
edges: [
{
node: [Team]
__typename: "TeamMetricsConnectionEdge"
}
]
__typename: "TeamMetricsConnection"
}
我想将此功能添加到我的Apollo Server模拟中,但不确定如何?
新架构(相关位):
type TeamMetrics {
timestamp: Int
# etc
}
type TeamMetricsConnection {
edges: [TeamMetricsConnectionEdge]
pageInfo: PageInfo
}
type PageInfo {
hasPreviousPage: Boolean!
hasNextPage: Boolean!
startCursor: String
endCursor: String
}
type Query {
teams(bpxId: Int): [Team]
}
type Team {
bpxId: Int!
metrics(first: Int! = 5, after: String): TeamMetricsConnection
}
如何调整模拟响应以处理中继分页?谢谢
答案 0 :(得分:0)
您可以使用graphql-relay
创建模拟解析器结果。这可能是为静态模拟数组创建分页的简单方法。使用connectionFromArray
包装模拟数组,以自动创建适合连接类型的对象结构。可以像在真实解析器中进行操作一样,将其访问模拟中的所有字段参数,然后将它们传递给函数。
但是,不确定在MockList
上调用该函数是否可行。如果结果的长度始终在变化,则分页也会有些棘手(pageInfo.hasNextPage
可能会混淆,并且您可能违反了Relay根据规范所做的许多假设)。因此,如果满足您的模拟需求,从一个简单的静态数组开始可能会很好。