【问题标题】:Best practice for schema naming of entity/collection实体/集合模式命名的最佳实践
【发布时间】:2019-12-04 19:37:04
【问题描述】:

我正在构建一个 Graphql Schema,我正在徘徊返回单个类型与集合项的最佳实践是什么。假设我们要检索users

一个选项(如果可能的话)是这样的查询,其中ID 是可选的,如果ID 被传递,我们返回一个项目,如果不是所有用户的集合

query {
  user (id: 1234) {
    name
  }
}

// return a single [User]
query {
  user (id: null) {
    name
  }
}

// return a collection [User,User,User,...]

另一种选择是使用userusers

query {
  user (id: 1234) {
    name
  }
}

// return a single User
query {
  users {
    name
  }
}

// return a collection [User,User,User,...]

我想知道最佳做法是什么,或者您能否指出一些与此相关的资源供我阅读。

【问题讨论】:

    标签: graphql apollo-client


    【解决方案1】:

    我使用单数和复数名词来命名分别返回单个对象和对象列表的查询字段。我认为这种命名风格对大多数开发人员来说是很自然的。

    所以要返回单个用户,它是:

    type Query {
       user(id:Int!) : User
    }
    

    它总是返回一个用户。只需将id 输入参数设为必填,使其无法接受NULL

    并返回一个用户列表,通常是:

    type Query {
       users : [User]
    }
    

    但如果它可以有很多用户,很可能您需要考虑分页之类的东西,它允许开发人员逐页获取用户。对于基于偏移量的分页,我正在执行以下操作:

    type Query {
       users(offset:Int limit:Int) : UserPage
    }
    
    type UserPage {
       data     : [User]
       pageInfo : PageInfo
    }
    
    type PageInfo {
    
        # When paginating forwards, are there more items?
        hasNextPage    : Boolean!
    
        # When paginating backwards, are there more items?
        hasPreviousPage: Boolean!
    
        # Total number of records in all page
        total : Long
    }
    

    根据需求,您可以考虑在users查询字段中添加orderByfilter输入参数,为开发者提供更多选项,以获取他们感兴趣的结果集。

    如果您想以基于光标的分页样式返回用户列表,可以查看Relay Specification

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 2011-06-04
      • 2010-09-06
      • 2011-08-09
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      相关资源
      最近更新 更多