架构设计可避免嵌套分页



首先,我使用的是"中继"分页的简化版本,其中"列表"是"连接"的基本等价物,"limit"相当于"第一个","cursor"等效于"之后"。

这是我的架构的相关部分:

extend type Query {
artist(id: ID!): Artist
artists(limit: Int!, cursor: String): ArtistList!
}
type Artist {
id: ID!
account: Account!
photos(limit: Int!, cursor: String): PhotoList!
website: String
instagram: String
facebook: String
created: Date!
updated: Date
about: String
}
type ArtistList {
nodes: [Artist]!
page: Page!
}

我想避免嵌套分页,所以希望允许在查询artist上获取photos的下一个节点,而不允许在查询artists上获取photos的下一个节点(例如,允许在查询artistphotos的参数cursor,并在查询artists上禁止它(。但是我看不出如何在 GraphQL 模式中表达这一点。

没有办法做你想具体做的事情。您可以从artist返回不同的类型(例如ArtistWithPagination(和来自artists(例如ArtistWithoutPagination(。我不确定这是否值得权衡两种非常相似的类型。

或者,当用户尝试以这种不需要的方式(使用自定义验证规则(查询 API 时,可能会引发运行时错误。如果你的 GraphQL API 是内部的,你甚至可以开发一个 linter,它会警告开发人员在查询中进行双分页。

最新更新