繁体   English   中英

GraphQL 关于查询设计中好的模式的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM