首页 > 解决方案 > 通过各种 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

解决方案


可以说是 Graphql 精神的companyByRoleId特定查询。companyByUserIdGraphql 旨在表达和自我记录。

与组合的通用替代方案相比,例如companyById(roleID: String, userID: String),您的设计看起来更清晰且不易出错。

尽管如此,我相信您当前的设计有一个更清晰、更明确的替代方案。向您的和类型添加一个Company字段。消费者可以使用您的普通用户和角色查询访问用户或角色。您不再需要或。RoleUserCompanycompanyByRoleIdcompanyByUserId

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
    }
  }
}

推荐阅读