entity/collection 模式命名的最佳实践
Best practice for schema naming of entity/collection
我正在构建一个 Graphql Schema,我在想什么是 returning 单个类型与集合类型的最佳实践。假设我们要检索 users
、
一个选项(如果可能的话)是有一个这样的查询,其中 ID
是可选的,如果 ID
被传递,我们 return 一个单一的项目,如果没有所有用户的集合
query {
user (id: 1234) {
name
}
}
// return a single [User]
query {
user (id: null) {
name
}
}
// return a collection [User,User,User,...]
另一种选择是 user
和 users
query {
user (id: 1234) {
name
}
}
// return a single User
query {
users {
name
}
}
// return a collection [User,User,User,...]
我想知道什么是最佳实践,或者您是否可以指出一些与此相关的资源供我阅读。
我使用单数名词和复数名词来命名查询字段,return 分别是单个对象和对象列表。我认为这种命名风格对大多数开发人员来说都很自然。
所以对于return单个用户来说,是:
type Query {
user(id:Int!) : User
}
它总是 return 一个用户。只需将 id
输入参数设置为必需参数,这样它就不能接受 NULL
.
和return一个用户列表,通常是:
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
查询字段中添加一个orderBy
或一个filter
输入参数,为开发者获取结果提供更多选择设置他们感兴趣。
如果你想return光标分页风格的用户列表,你可以看看Relay Specification。
我正在构建一个 Graphql Schema,我在想什么是 returning 单个类型与集合类型的最佳实践。假设我们要检索 users
、
一个选项(如果可能的话)是有一个这样的查询,其中 ID
是可选的,如果 ID
被传递,我们 return 一个单一的项目,如果没有所有用户的集合
query {
user (id: 1234) {
name
}
}
// return a single [User]
query {
user (id: null) {
name
}
}
// return a collection [User,User,User,...]
另一种选择是 user
和 users
query {
user (id: 1234) {
name
}
}
// return a single User
query {
users {
name
}
}
// return a collection [User,User,User,...]
我想知道什么是最佳实践,或者您是否可以指出一些与此相关的资源供我阅读。
我使用单数名词和复数名词来命名查询字段,return 分别是单个对象和对象列表。我认为这种命名风格对大多数开发人员来说都很自然。
所以对于return单个用户来说,是:
type Query {
user(id:Int!) : User
}
它总是 return 一个用户。只需将 id
输入参数设置为必需参数,这样它就不能接受 NULL
.
和return一个用户列表,通常是:
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
查询字段中添加一个orderBy
或一个filter
输入参数,为开发者获取结果提供更多选择设置他们感兴趣。
如果你想return光标分页风格的用户列表,你可以看看Relay Specification。