graphql - 通过各种 ID 查询的 GraphQL 标准
问题描述
我有以下实体:
company
role
user
一个公司有很多角色,一个角色有很多用户。我正在尝试构建一个允许某人通过角色 ID 查询公司的 GraphQL 查询。我最初的想法是构建一个companyByRoleId
查询,但想仔细检查这种方法是否是最佳实践。在下面的示例模式中,是companyByRoleId
最佳实践,还是有更好的方法让消费者查询角色所属的公司?
type Company {
id: ID!
name: String
roles: Role[]
}
type Role {
id: ID!
name: String
users: User[]
}
type User {
id: ID!
name: String
}
query($roleId: ID!){
companyByRoleId(roleId: $roleId){
id
name
}
}
query($companyId: ID!){
companyById(companyId: $companyId){
id
name
}
}
query($userId: ID!){
companyByUserId(userId: $userId){
id
name
}
}
解决方案
可以说是 Graphql 精神的companyByRoleId
特定查询。companyByUserId
Graphql 旨在表达和自我记录。
与组合的通用替代方案相比,例如companyById(roleID: String, userID: String)
,您的设计看起来更清晰且不易出错。
尽管如此,我相信您当前的设计有一个更清晰、更明确的替代方案。向您的和类型添加一个Company
字段。消费者可以使用您的普通用户和角色查询访问用户或角色。您不再需要或。Role
User
Company
companyByRoleId
companyByUserId
type Role {
id: ID!
name: String
users: User[]
company: Company
}
type User {
id: ID!
name: String
company: Company
}
query($id: ID!){
role(id: $id){
id
company {
id
name
}
}
}
query($id: ID!){
user(id: $id){
id
company {
id
name
}
}
}