关于使用 GraphQL 管理企业帐户
为帮助您监测和更改组织并保持合规性,可以使用只能作为 GraphQL API 的企业帐户 API 和审核日志 API。
企业帐户端点适用于 GitHub Enterprise Cloud 和 GitHub Enterprise Server。
GraphQL 可用于仅请求和返回您指定的数据。 例如,您可以创建 GraphQL 查询或请求信息,以查看添加至您组织的所有新组织成员。 或者,也可以执行突变或更改操作,以邀请管理员加入您的企业帐户。
通过审核日志 API,可以监测何时有人:
- 访问组织或仓库设置。
- 更改权限。
- 在组织、仓库或团队中添加或删除用户。
- 将用户提升为管理员。
- 更改 GitHub 应用程序的权限。
审核日志 API 可帮助您保存审核日志数据的副本。 对于使用审核日志 API 执行的查询,GraphQL 响应最多可包含 90 至 120 天的数据。 有关通过审核日志 API 获得的字段列表,请参阅“AuditEntry 接口。”
通过企业帐户 API,可以:
- 列出并审查属于企业帐户的所有组织和仓库。
- 更改企业帐户设置。
- 配置企业帐户及其组织的设置策略。
- 邀请管理员加入您的企业帐户。
- 在企业帐户中创建新组织。
有关通过企业帐户 API 获得的字段列表,请参阅“企业帐户 API 的 GraphQL 字段和类型。”
开始将 GraphQL 用于企业帐户
按照以下步骤开始利用 GraphQL 管理企业帐户:
- 使用个人访问令牌进行身份验证
- 选择 GraphQL 客户端或使用 GraphQL Explorer
- 设置 Insomnia 以使用 GraphQL API
有关查询示例,请参阅“使用企业帐户 API 的查询示例。”
1. 使用个人访问令牌进行身份验证
-
要使用 GraphQL 进行身份验证,需要通过开发者设置生成个人访问令牌 (PAT)。 更多信息请参阅“创建个人访问令牌”。
-
向要访问的 GHES 区域的个人访问令牌授予管理员和完全控制权限。 要获得对私有仓库、组织、团队、用户数据及企业帐单和个人资料数据访问的完全权限,建议您为个人访问令牌选择以下作用域:
repo
admin:org
用户
admin:enterprise
企业帐户特定作用域包括:
admin:enterprise
:全面控制企业(包括manage_billing:enterprise
和read:enterprise
)manage_billing:enterprise
:读取和写入企业帐单数据。read:enterprise
:读取企业简介数据。
-
复制个人访问令牌并保存在安全的位置,直到将其添加至您的 GraphQL 客户端。
2. 选择 GraphQL 客户端
建议您使用 GraphiQL 或可用于配置基准 URL 的其他独立 GraphQL 客户端。
也可以考虑使用以下 GraphQL 客户端:
接下来将使用 Insomnia。
3. 设置 Insomnia,以使用 GitHub GraphQL API 处理企业账户
-
将基准 url 和
POST
方法添加至您的 GraphQL 客户端。 使用 GraphQL 请求信息(查询)、更该信息(突变)或使用 GitHub API 传输数据时,默认 HTTP 方法为POST
,基准 url 遵循的语法为:- 对于企业实例:
https://<HOST>/api/graphql
- 对于 GitHub Enterprise Cloud:
https://api.github.com/graphql
- 对于企业实例:
-
要进行身份验证,请打开身份验证选项菜单,并选择 Bearer token(不记名令牌)。 接下来,添加您之前复制的个人访问令牌。
-
加入标头信息。
- 添加
Content-Type
作为标头,application/json
作为值。
- 添加
现在可以开始执行查询了。
使用企业账户 API 的查询示例
此 GraphQL 查询可使用企业账户 API 请求每个设备组织中的 public
仓库的总数。 要自定义此查询,请用企业实例 slug 的 slug 替换 <enterprise-account-name>
。
query publicRepositoriesByOrganization($slug: String!) query publicRepositoriesByOrganization($slug: String!) {
enterprise(slug: $slug) {
...enterpriseFragment
}
}
fragment enterpriseFragment on Enterprise {
... on Enterprise{
name
organizations(first: 100){
nodes{
name
... on Organization{
name
repositories(privacy: PUBLIC){
totalCount
}
}
}
}
}
}
# Passing our Enterprise Account as a variable
variables {
"slug": "<enterprise-account-name>"
}
下一个 GraphQL 查询示例显示了在不使用企业账户 API 的情况下检索各个组织中的 public
仓库总数时的挑战性。 请注意,GraphQL 企业账户 API 已使企业执行此任务变得更简单,因为您只需要自定义单个变量。 要自定义此查询,请将 <name-of-organization-one>
和 <name-of-organization-one>
等参数替换为 实例中的组织名称。
# Each organization is queried separately
{
organizationOneAlias: organization(login: "nameOfOrganizationOne") {
# How to use a fragment
...repositories
}
organizationTwoAlias: organization(login: "nameOfOrganizationTwo") {
...repositories
}
# organizationThreeAlias ... and so on up-to lets say 100
}
## How to define a fragment
fragment repositories on Organization {
name
repositories(privacy: PUBLIC){
totalCount
}
}
分别查询每个组织
query publicRepositoriesByOrganization {
organizationOneAlias: organization(login: "<name-of-organization-one>") {
# How to use a fragment
...repositories
}
organizationTwoAlias: organization(login: "<name-of-organization-two>") {
...repositories
}
# organizationThreeAlias ... and so on up-to lets say 100
}
# How to define a fragment
fragment repositories on Organization {
name
repositories(privacy: PUBLIC){
totalCount
}
}
此 GraphQL 查询用于请求企业组织的最后 5 个日志条目。 要自定义此查询,请替换 <org-name>
和 <user-name>
。
{
organization(login: "<org-name>") {
auditLog(last: 5, query: "actor:<user-name>") {
edges {
node {
... on AuditEntry {
# Get Audit Log Entry by 'Action'
action
actorLogin
createdAt
# User 'Action' was performed on
user{
name
email
}
}
}
}
}
}
}
有关开始使用 GraphQL 的更多信息,请参阅“GraphQL 简介”和“使用 GraphQL 建立调用。”
企业账户 API 的 GraphQL 字段和类型
下面是关于可与企业账户 API 结合使用的新查询、突变和架构定义类型的概述。
For more details about the new queries, mutations, and schema defined types available for use with the Enterprise Accounts API, see the sidebar with detailed GraphQL definitions from any GraphQL reference page.
您可以从 GitHub 的 GraphQL explorer 访问参考文档。 更多信息请参阅“使用 explorer。” 有关其他信息,如身份验证和速率限制详细信息,请查看指南。 有关其他信息,如身份验证和速率限制详细信息,请查看指南。