通过各种 ID 查询的 GraphQL 标准
GraphQL standard for querying by various IDs
我有以下实体:
company
role
user
一个公司有很多角色,一个角色有很多用户。我正在尝试构建一个 GraphQL 查询,它允许某人通过角色 ID 查询公司。我最初的想法是构建一个 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
}
}
companyByRoleId
和 companyByUserId
中的特定查询可以说符合 Graphql 的精神。 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
}
}
}
我有以下实体:
company
role
user
一个公司有很多角色,一个角色有很多用户。我正在尝试构建一个 GraphQL 查询,它允许某人通过角色 ID 查询公司。我最初的想法是构建一个 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
}
}
companyByRoleId
和 companyByUserId
中的特定查询可以说符合 Graphql 的精神。 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
}
}
}