[英]GraphQL question about good patterns in query design
总的来说,我在 Graphql 和 API 开发方面还很陌生。
周围有很多教程,但有时我对某些实现模式有疑问。 特别是,我想知道编写 GraphQL 模式的最佳实践。
在几乎所有教程中(如 REST API 的情况),在编写查询以检索实体列表时,通常如下所示:
query{
Books{
id,
title,
something
}}
几乎总是会出现另一个查询以恢复该实体的单个 object,例如:
query{
Book(id:id){
id,
title,
something
}}
这是我的第一个实施疑问。 当我 go 编写与数据库接口以进行数据检索的 function 时,两个解析器的代码几乎相同。 只有在第二种情况下我会添加一个 where 子句(例如 where bookID = id
)
此时我想知道,为什么我不能使用单个查询并将各种过滤器添加为 arguments?
query{
Books(filters:{id:id, title:title, ...}){
id,
title,
something
}}
为每个过滤器添加不同的查询有什么意义?
这只是更好地组织入口点的问题,还是我遗漏了其他东西?
虽然对于 REST API 这对我来说很有意义,但对于 GraphQL 我看不到好处,因为过度获取不是问题。
有好心人赐教吗?
你是对的,这是一个主观决定,你可以 go 无论哪种方式。 您应该在这里期待自以为是的答案。
当您在 typeDef 中定义查询时,您还指定了您希望返回的内容。 前任:
query {
getBook (id: ID!): Book
getBooks: [Book!]!
}
在第一个查询中,您知道返回的 object 是一本书。 在第二个中,您将获得一系列书籍。
如果您构建可以返回一本或多本书的查询,那很好 - 您可以期望一个数组中可能只有一本书。
当您期待一本书但得到多本书时,您可能会在前端遇到问题。 如果您按 ID 查询图书,您期望的是一本书,但如果您按书名查询图书,如果碰巧有多本具有相同书名的书(例如,同一书名的平装本与精装本),您可能会得到 0、1 或 N 本书).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.