Skip to main content

GraphQL API 的速率限制和查询限制

GitHub GraphQL API 设有限制,以防止向 GitHub 的服务器发出过多或滥用的请求。

在本文中

主要速率限制

默认情况下 GitHub Enterprise Server禁用速率限制。 请与站点管理员联系,以确认实例的速率限制。

如果你是网站管理员,可以为实例设置速率限制。 有关详细信息,请参阅“配置速率限制”。

如果为超出您实例范围的用户或组织开发应用程序,则适用标准 GitHub 速率限制。 有关详细信息,请参阅文档中的 GitHub Free。

节点限制

若要通过 schema 验证,所有 GraphQL API calls必须满足以下标准:

  • 客户端必须在任何 first 上提供 last 参数。
  • firstlast 的值必须在 1-100 以内。
  • 单个调用不能请求超过 500,000 个节点

计算调用中的节点

下面两个示例显示如何计算调用中的节点总数。

  1. 简单查询:

    query {
      viewer {
        repositories(first: 50) {
    

edges { repository:node { name

issues(first: 10) { totalCount edges { node { title bodyHTML } } } } } } } }

计算:

50         = 50 repositories
    +
   50 x 10  = 500 repository issues

= 550 total nodes
  1. 复杂查询:

    query {
      viewer {
        repositories(first: 50) {
    

edges { repository:node { name

pullRequests(first: 20) { edges { pullRequest:node { title

comments(first: 10) { edges { comment:node { bodyHTML } } } } } }

issues(first: 20) { totalCount edges { issue:node { title bodyHTML

comments(first: 10) { edges { comment:node { bodyHTML } } } } } } } } }

   followers(first: <span class="bluebox">10</span>) {

edges { follower:node { login } } } } }

计算:

50              = 50 repositories
    +
   50 x 20       = 1,000 pullRequests
    +
   50 x 20 x 10 = 10,000 pullRequest comments
    +
   50 x 20       = 1,000 issues
    +
   50 x 20 x 10 = 10,000 issue comments
    +
   10              = 10 followers

= 22,060 total nodes

查询优化策略

  • 限制对象数量:对 firstlast 参数使用较小值,并对结果分页。
  • 减少查询深度:除非必要,否则请避免请求深度嵌套对象。
  • 筛选结果:使用参数筛选数据并仅返回所需内容。
  • 拆分大型查询:将复杂查询拆分为多个更简单的查询。
  • 仅请求必填字段:仅选择所需字段,而不是请求所有可用字段。

通过遵循这些策略,可以降低达到资源限制的可能性,并提高 API 请求的性能和可靠性。