通过各种 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
  }
}

companyByRoleIdcompanyByUserId 中的特定查询可以说符合 Graphql 的精神。 Graphql 旨在表达和自我记录。

针对组合的通用替代方案,例如 companyById(roleID: String, userID: String),您的设计似乎更清晰且不易出错。

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

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