Zonos が複雑さに基づいてクエリ コストを計算する方法を学びます。
Zonos レートは、リクエスト数ではなくクエリの複雑さに基づいて GraphQL API リクエストを制限します。これにより、公正な使用が確保され、必要なデータを正確にリクエストできるようになります。
従来の REST APIs はリクエストベースのレート制限を使用しており、サーバー負荷に大きな違いがあるにもかかわらず、1 つのフィールドをフェッチするか数百のフィールドをフェッチするかにかかわらず、またデータの読み取りまたは変更にかかわらず、すべてのリクエストが同じクレジットを消費します。
GraphQL のクエリの複雑さベースのアプローチは、要求された実際のデータと実行された操作に基づいてコストを計算することで、この問題を解決します。これにより、予測可能なサーバー負荷を提供しながら、必要なものをより柔軟にリクエストできるようになります。
Zonos は、各クエリの複雑さに基づいてポイントを減算するポイントベースのシステムを使用します。次のような利用可能なポイントがプールされています。
これにより、持続可能なリクエストのペースを維持しながら、複雑なクエリを時折バーストすることができます。
すべての GraphQL リクエストには、実行前にコストが計算されます。
文字列、整数、ID、ブール値などのスカラー フィールドはコストを追加しません。料金を支払うのは、基本操作と返されたオブジェクトの料金のみです。
query {
landedCost(id: "123") {
id
createdBy
shipToCountry
}
コストの内訳: 5 (基本クエリ) + 1 (Landed Cost オブジェクト) = 6 ポイント
スカラー フィールド (id、name、currency) は無料です。
name
currency
{
orders(first: 10, filter: { status: COMPLETED }) {
edges {
cursor
node {
コストの内訳: 5 (基本クエリ) + 10 (10 注文 × 各 1 ポイント) = 15 ポイント
mutation {
landedCostCalculate(input: { ... }) {
コストの内訳: 10 (基本ミューテーション) + 約 50 (返されたオブジェクト) = 60 ポイント
一般的な Landed Cost の計算には、約 60 ポイントの複雑さが伴います。
すべての API 応答には、クエリのコストを示す zonos-query-complexity ヘッダーが含まれています。
zonos-query-complexity
zonos-query-complexity: 58
このヘッダーは、クエリが消費したポイント数を正確に示します。これを使用して、API の使用状況を監視し、高価なクエリを最適化します。
レート制限を超えると、エラー メッセージが表示されます。レート制限を効果的に処理するには:
複雑さを監視する
応答内の zonos-query-complexity ヘッダーを確認して、クエリのコストを理解し、高価なパターンを特定します。
再試行ロジックの実装
レート制限に達した場合は、指数バックオフを実装し、ロジックを再試行します。バケットは 1 秒あたり 3,000 ポイントで補充されるため、クエリの複雑さに基づいて適切な待機時間を計算します。
効率的なバッチ処理
GraphQL を使用すると、1 つのリクエストで複数のクエリをリクエストできます。
landedCost(id: "landed_cost_123") {
createdAt
order(orderId: "order_123") {
status
必要なものだけをリクエストしてください
クエリの複雑さは、リクエストするデータに比例します。実際に使用するフィールドとオブジェクトのみを取得するようにクエリを構成します。
updatedAt
items {
quantity
amount
shipments {
大規模なデータセットのページネーション
複数のオブジェクトをリクエストする場合は、適切なページ サイズを使用してください。
orders(first: 100, filter: { status: COMPLETED }) {
単一のクエリで数百のオブジェクトをリクエストするのではなく、一度に 10 ~ 50 のアイテムをリクエストし、必要に応じて結果をページ分割します。
不必要なネストを避ける
ネストされたオブジェクトごとに複雑さが増します。ネストされたデータは、実際に必要な場合にのみ要求してください。
GraphQL API レート制限
GraphQL API レート制限
Zonos が複雑さに基づいてクエリ コストを計算する方法を学びます。
Zonos レートは、リクエスト数ではなくクエリの複雑さに基づいて GraphQL API リクエストを制限します。これにより、公正な使用が確保され、必要なデータを正確にリクエストできるようになります。
なぜ複雑さに基づいてレート制限を行うのでしょうか?
従来の REST APIs はリクエストベースのレート制限を使用しており、サーバー負荷に大きな違いがあるにもかかわらず、1 つのフィールドをフェッチするか数百のフィールドをフェッチするかにかかわらず、またデータの読み取りまたは変更にかかわらず、すべてのリクエストが同じクレジットを消費します。
GraphQL のクエリの複雑さベースのアプローチは、要求された実際のデータと実行された操作に基づいてコストを計算することで、この問題を解決します。これにより、予測可能なサーバー負荷を提供しながら、必要なものをより柔軟にリクエストできるようになります。
レート制限
Zonos は、各クエリの複雑さに基づいてポイントを減算するポイントベースのシステムを使用します。次のような利用可能なポイントがプールされています。
これにより、持続可能なリクエストのペースを維持しながら、複雑なクエリを時折バーストすることができます。
クエリコストの計算方法
すべての GraphQL リクエストには、実行前にコストが計算されます。
基本コスト
文字列、整数、ID、ブール値などのスカラー フィールドはコストを追加しません。料金を支払うのは、基本操作と返されたオブジェクトの料金のみです。
例: 単純なクエリ
query {landedCost(id: "123") {idcreatedByshipToCountry}}コストの内訳: 5 (基本クエリ) + 1 (Landed Cost オブジェクト) = 6 ポイント
スカラー フィールド (
id、name、currency) は無料です。例: 複数のオブジェクトを使用したクエリ
{orders(first: 10, filter: { status: COMPLETED }) {edges {cursornode {id}}}}コストの内訳: 5 (基本クエリ) + 10 (10 注文 × 各 1 ポイント) = 15 ポイント
例: ミューテーション
mutation {landedCostCalculate(input: { ... }) {id}}コストの内訳: 10 (基本ミューテーション) + 約 50 (返されたオブジェクト) = 60 ポイント
一般的な Landed Cost の計算には、約 60 ポイントの複雑さが伴います。
クエリの複雑さの表示
すべての API 応答には、クエリのコストを示す
zonos-query-complexityヘッダーが含まれています。zonos-query-complexity: 58このヘッダーは、クエリが消費したポイント数を正確に示します。これを使用して、API の使用状況を監視し、高価なクエリを最適化します。
レート制限の処理
レート制限を超えると、エラー メッセージが表示されます。レート制限を効果的に処理するには:
複雑さを監視する
応答内の
zonos-query-complexityヘッダーを確認して、クエリのコストを理解し、高価なパターンを特定します。再試行ロジックの実装
レート制限に達した場合は、指数バックオフを実装し、ロジックを再試行します。バケットは 1 秒あたり 3,000 ポイントで補充されるため、クエリの複雑さに基づいて適切な待機時間を計算します。
効率的なバッチ処理
GraphQL を使用すると、1 つのリクエストで複数のクエリをリクエストできます。
{landedCost(id: "landed_cost_123") {idcreatedAt}order(orderId: "order_123") {idstatuscreatedAt}}ベストプラクティス
必要なものだけをリクエストしてください
クエリの複雑さは、リクエストするデータに比例します。実際に使用するフィールドとオブジェクトのみを取得するようにクエリを構成します。
query {order(orderId: "order_123") {idstatuscreatedAtupdatedAtitems {idnamequantityamount}shipments {id}}}大規模なデータセットのページネーション
複数のオブジェクトをリクエストする場合は、適切なページ サイズを使用してください。
{orders(first: 100, filter: { status: COMPLETED }) {edges {cursornode {id}}}}単一のクエリで数百のオブジェクトをリクエストするのではなく、一度に 10 ~ 50 のアイテムをリクエストし、必要に応じて結果をページ分割します。
不必要なネストを避ける
ネストされたオブジェクトごとに複雑さが増します。ネストされたデータは、実際に必要な場合にのみ要求してください。
このページは役に立ちましたか?