{"meta":{"title":"GraphQL API 的速率限制和查询限制","intro":"GitHub GraphQL API 设有限制，以防止向 GitHub 的服务器发出过多或滥用的请求。","product":"GraphQL API","breadcrumbs":[{"href":"/zh/enterprise-server@3.22/graphql","title":"GraphQL API"},{"href":"/zh/enterprise-server@3.22/graphql/overview","title":"概述"},{"href":"/zh/enterprise-server@3.22/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api","title":"速率和查询限制"}],"documentType":"article"},"body":"# GraphQL API 的速率限制和查询限制\n\nGitHub GraphQL API 设有限制，以防止向 GitHub 的服务器发出过多或滥用的请求。\n\n## 主要速率限制\n\n默认情况下 GitHub Enterprise Server禁用速率限制。 请与站点管理员联系，以确认实例的速率限制。\n\n如果你是网站管理员，可以为实例设置速率限制。 有关详细信息，请参阅“[配置速率限制](/zh/enterprise-server@3.22/admin/configuring-settings/configuring-user-applications-for-your-enterprise/configuring-rate-limits)”。\n\n如果为超出您实例范围的用户或组织开发应用程序，则适用标准 GitHub 速率限制。 有关详细信息，请参阅文档中的 [](/zh/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api)GitHub Free。\n\n## 节点限制\n\n若要通过 [schema](/zh/enterprise-server@3.22/graphql/guides/introduction-to-graphql#schema) 验证，所有 GraphQL API [calls](/zh/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql)必须满足以下标准：\n\n* 客户端必须在任何 `first` 上提供 `last` 或 [](/zh/enterprise-server@3.22/graphql/guides/introduction-to-graphql#connection) 参数。\n* `first` 和 `last` 的值必须在 1-100 以内。\n* 单个调用不能请求超过 500,000 个[节点](/zh/enterprise-server@3.22/graphql/guides/introduction-to-graphql#node)。\n\n### 计算调用中的节点\n\n下面两个示例显示如何计算调用中的节点总数。\n\n1. 简单查询：\n\n   <pre>query {\n     viewer {\n       repositories(first: <span class=\"redbox\">50</span>) {\n\nedges {\nrepository:node {\nname\n\nissues(first: <span class=\"greenbox\">10</span>) {\ntotalCount\nedges {\nnode {\ntitle\nbodyHTML\n}\n}\n}\n}\n}\n}\n}\n}</pre>\n\n计算：\n\n   <pre><span class=\"redbox\">50</span>         = 50 repositories\n    +\n   <span class=\"redbox\">50</span> x <span class=\"greenbox\">10</span>  = 500 repository issues\n\n= 550 total nodes</pre>\n\n1. 复杂查询：\n\n   <pre>query {\n     viewer {\n       repositories(first: <span class=\"redbox\">50</span>) {\n\nedges {\nrepository:node {\nname\n\npullRequests(first: <span class=\"greenbox\">20</span>) {\nedges {\npullRequest:node {\ntitle\n\ncomments(first: <span class=\"bluebox\">10</span>) {\nedges {\ncomment:node {\nbodyHTML\n}\n}\n}\n}\n}\n}\n\nissues(first: <span class=\"greenbox\">20</span>) {\ntotalCount\nedges {\nissue:node {\ntitle\nbodyHTML\n\ncomments(first: <span class=\"bluebox\">10</span>) {\nedges {\ncomment:node {\nbodyHTML\n}\n}\n}\n}\n}\n}\n}\n}\n}\n\n```\n   followers(first: <span class=\"bluebox\">10</span>) {\n```\n\nedges {\nfollower:node {\nlogin\n}\n}\n}\n}\n}</code></pre>\n\n计算：\n\n   <pre><span class=\"redbox\">50</span>              = 50 repositories\n    +\n   <span class=\"redbox\">50</span> x <span class=\"greenbox\">20</span>       = 1,000 pullRequests\n    +\n   <span class=\"redbox\">50</span> x <span class=\"greenbox\">20</span> x <span class=\"bluebox\">10</span> = 10,000 pullRequest comments\n    +\n   <span class=\"redbox\">50</span> x <span class=\"greenbox\">20</span>       = 1,000 issues\n    +\n   <span class=\"redbox\">50</span> x <span class=\"greenbox\">20</span> x <span class=\"bluebox\">10</span> = 10,000 issue comments\n    +\n   <span class=\"bluebox\">10</span>              = 10 followers\n\n= 22,060 total nodes</pre>\n\n## 查询优化策略\n\n* **限制对象数量**：对 `first` 或 `last` 参数使用较小值，并对结果分页。\n* **减少查询深度**：除非必要，否则请避免请求深度嵌套对象。\n* **筛选结果**：使用参数筛选数据并仅返回所需内容。\n* **拆分大型查询**：将复杂查询拆分为多个更简单的查询。\n* **仅请求必填字段**：仅选择所需字段，而不是请求所有可用字段。\n\n通过遵循这些策略，可以降低达到资源限制的可能性，并提高 API 请求的性能和可靠性。"}