> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# GraphQL の制限と課金

> Ayrshare が GraphQL リクエストを API クォータに対してどのようにカウントするか、およびクエリの深さ、フィールド、エイリアス、リクエストサイズの制限について。

<h2 id="how-requests-are-counted">
  リクエストのカウント方法
</h2>

**実行された各ルート操作フィールドが 1 回の API 呼び出しです。** 4 つのルートフィールドを要求する GraphQL リクエストは、4 回の REST リクエストを行った場合とまったく同じく、4 回の API 呼び出しとして課金されます。ルートのエイリアスは、それぞれが操作をディスパッチするため個別にカウントされます。型付きレスポンスから選択したネストされたフィールドは、API 呼び出しを増やしません。

```graphql theme={"system"}
{
  history: postHistory(lastDays: 7)
  accounts: user
  comments: comments(id: "abc123")
  analytics: socialAnalytics(platforms: [INSTAGRAM])
}
```

1 回の HTTP リクエストで、プランのクォータとレート制限に対して **4 回の API 呼び出し**となります。

これは意図的なものであり、公正なモデルです。各ルートフィールドは、こちら側で同等の REST 呼び出しと同じ処理を行うため、同じコストがかかります。GraphQL はラウンドトリップを削減し、必要なものを 1 か所でまとめて取得できるようにするものであり、プランに含まれる以上の API 呼び出しを得るための手段ではありません。

実際上の影響は次のとおりです:

<ul class="custom-bullets">
  <li>既存のプランの制限はそのまま適用されます。プランの許容量については <a href="/docs/apis/overview">API の制限</a> を参照してください。</li>
  <li>不要なルート操作を要求すると、REST で呼び出した場合と同じコストがかかります。必要なネストされたレスポンスフィールドを選択しても、呼び出し回数は増えません。</li>
  <li>リクエストは<em>途中で</em>レート制限される場合があります。完了したルートフィールドはデータを保持し、制限されたルートフィールドのみがエラーを返します。<a href="/docs/apis/graphql/errors#partial-success">部分的な成功</a> を参照してください。</li>
</ul>

<h2 id="query-limits">
  クエリの制限
</h2>

エンドポイントは、クエリの形状とサイズにいくつかの制限を設けています。これらは、1 回のリクエストがこちらの処理能力を不当に消費できないようにするためのもので、通常の使用に必要な水準を大きく上回るように設定されています。制限に達している場合、それは通常、実際の必要性ではなく、誤って生成されたクエリの兆候です。

| 制限 | 値 | 確認方法 |
| - | - | - |
| リクエストあたりの API 呼び出し数 | 5 | 超過した各ルートフィールドで `extensions.status` 429 |
| クエリのネストの深さ | 15 | 実行前にクエリが拒否される |
| リクエストあたりのフィールド数 | 300 | 実行前にクエリが拒否される |
| リクエストあたりのエイリアス数 | 25 | 実行前にクエリが拒否される |
| リクエストボディのサイズ | 64 KB | HTTP 413 |

拒否されたクエリは、`Accept: application/graphql-response+json` を送信した場合は HTTP 400 を、それ以外の場合は HTTP 200 を返し、いずれの場合も `errors` 配列を含み、`data` は含みません。[エラー](/docs/apis/graphql/errors)を参照してください。

<h3 id="api-calls-per-request">
  リクエストあたりの API 呼び出し数
</h3>

最も重要な制限です。1 回のリクエストで発生させられる API 呼び出しは最大 **5** 回であるため、上記の 4 つのルートフィールドの例は問題ありませんが、20 個のルートフィールドを持つリクエストは許可されません。5 回のディスパッチが開始されると、追加のルートフィールドは制限を説明する 429 を返します。すでにディスパッチされたフィールドは引き続きデータを返すことができます。

さらに必要な場合は、クエリを複数のリクエストに分割してください。正当なワークロードのためにそれを日常的に行っている場合は、[お問い合わせください](/docs/help-center/overview)。この制限はリリース時点では意図的に控えめに設定されています。引き上げるのは簡単ですが、後から引き下げるとインテグレーションが壊れてしまうため、小さな値から始めています。

<h3 id="depth-fields-and-aliases">
  深さ、フィールド、エイリアス
</h3>

これらは何かが実行される前にチェックされるため、超過しても API 呼び出しは一切消費されません。

また、これらの制限は完全なイントロスペクションクエリ（約 180 フィールド、深さ 12 レベル、エイリアスなし）を十分に上回っているため、起動時にスキーマ全体を取得するクライアントも正常に動作します。

<h3 id="request-body-size">
  リクエストボディのサイズ
</h3>

64 KB です。クエリには十分な大きさですが、ファイルにはまったく足りません。これが、GraphQL でメディアをアップロードできない理由です。サポートされている方法については [メディアのアップロード](/docs/apis/graphql/using-the-api#uploading-media) を参照してください。

<h2 id="timeouts">
  タイムアウト
</h2>

リクエスト全体には最大 120 秒が与えられます。**クエリ**のルートフィールドは**並行して実行される場合がある**ため、その所要時間は通常、最も遅い依存先によって決まります。**ミューテーション**のルートフィールドは**直列に実行される**ため、遅いミューテーションが複数あるとタイムアウトに向けて時間が累積する可能性があります。どちらの形式でも、バックエンドには最大 5 回分の並行または順次のディスパッチに相当する負荷がかかる可能性があります。必要に応じて、遅いことがわかっている処理は分割してください。

<h2 id="what-is-not-limited">
  制限されないもの
</h2>

<ul class="custom-bullets">
  <li><strong>スキーマの読み取り。</strong> イントロスペクションは認証不要で、計測もされません。何が存在するかの閲覧は無料ですが、操作の実行は無料ではありません。</li>
  <li><strong>不正なクエリ。</strong> 不明なフィールド、誤った型、無効な列挙値など、GraphQL が拒否するクエリは API に到達することはなく、課金されることもありません。</li>
</ul>

これらの制限は実際の使用状況に照らして見直されます。いずれかの制限が正当なインテグレーションに適していない場合はお知らせください。そのフィードバックは回避策よりも役立ちます。
