避免嵌套分页的模式设计
Schema design to avoid nested pagination
首先,我使用的是“中继”分页的简化版本,其中“列表”基本等同于“连接”,“限制”等同于“第一”,“游标”等同于到“之后”。
这是我的架构的相关部分:
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
的下一个节点](例如,在查询 artist
上允许 photos
的参数 cursor
并在查询 artists
上禁止它)。但我看不到如何在 GraphQL 模式中表达它。
没有办法做你具体想做的事。您可以 return 来自 artist
(例如 ArtistWithPagination
)和 artists
(例如 ArtistWithoutPagination
)的不同类型。我不确定是否值得权衡两种非常相似的类型。
或者,当用户试图以这种不受欢迎的方式(使用 custom validation rule)查询 API 时,您可以抛出运行时错误。如果您的 GraphQL API 是内部的,您甚至可以开发一个 linter,如果他们在查询中进行双重分页,它会警告开发人员。
首先,我使用的是“中继”分页的简化版本,其中“列表”基本等同于“连接”,“限制”等同于“第一”,“游标”等同于到“之后”。
这是我的架构的相关部分:
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
的下一个节点](例如,在查询 artist
上允许 photos
的参数 cursor
并在查询 artists
上禁止它)。但我看不到如何在 GraphQL 模式中表达它。
没有办法做你具体想做的事。您可以 return 来自 artist
(例如 ArtistWithPagination
)和 artists
(例如 ArtistWithoutPagination
)的不同类型。我不确定是否值得权衡两种非常相似的类型。
或者,当用户试图以这种不受欢迎的方式(使用 custom validation rule)查询 API 时,您可以抛出运行时错误。如果您的 GraphQL API 是内部的,您甚至可以开发一个 linter,如果他们在查询中进行双重分页,它会警告开发人员。