Reporting API のベストプラクティス
Tapjoy Offerwall Reporting API のエンドポイント、リクエストの構造、エラー処理について理解を深め、正確な収益化データに効果的にアクセスします。
読み終わるまでの所要時間 4 分最終更新 10日前
Reporting API を使用すると、広告主とパブリッシャーは GraphQL クエリ言語を使用して、Tapjoy プラットフォームのレポートデータにアクセスし、Offerwall コンテンツを管理できます。GraphQL の詳細については、GraphQL の公式 ウェブサイト を参照してください。 API エクスプローラー は、クエリの作成を支援します。左上隅にある本のアイコンをクリックすると、ドキュメントエクスプローラーが展開され、クエリで使用できるフィールドと指標に関する情報が表示されます。

API エンドポイント
Reporting API には 1 つのエンドポイントがあります。エンドポイントは、実行される操作に関係なく、同じままです。https://api.tapjoy.com/graphql
API との通信
アクセストークンを取得したら、API にリクエストできます。クエリとミューテーションのどちらを実行する場合でも、JSON エンコードされた本文が HTTP POST を介して提供され、API のリクエストを形成できます。 リクエストの例:POST /graphql Host: api.tapjoy.com Authorization: Bearer <OAuth Token>{ "query": "query { user { firstName } }"}
エラーへの対処
API の使用時に発生する可能性のあるエラーには、以下のいくつかのカテゴリがあります。- サーバー/ネットワークエラー
- 認証/承認エラー
- クエリ構文エラー
- データ検証エラー
以下で説明する各カテゴリは、コンテキストに以下のクエリを使用します。
query { user { firstName lastName }}
サーバー/ネットワークエラー
たまに API で回復不能なサーバー/ネットワークエラーが発生することがあります。このような場合、発生しているシナリオに適した http 状態コードを受け取ります。例えば、API でクエリの実行を妨げる問題が発生した場合、500 の状態コードの HTTP レスポンスを受け取ります。 このシナリオに対処する最善の方法は、指数関数的バックオフによる再試行動作を採用することです。認証/承認エラー
承認/承認エラーは、以下のいくつかの理由で発生することがあります。- OAuth トークンが期限切れになった
- OAuth トークンが無効である
- 基盤となる認証システムに問題が発生している
{ "errors": [ { "message": "Authentication could not be verified.Please try again later.", "code": 403 } ]}
- - 人間が判読できるエラーの説明
message - - HTTP 状態コードに対応する GraphQL 状態コード
code
クエリ構文エラー
すべてのクエリとミューテーションは、構文的に正しく、説明されているデータスキーマに従っていることが事前に検証されます。指定したクエリがすべてのスキーマ検証に合格しない場合、以下のデータが含まれる HTTP 200 OK レスポンスを受け取ります。{ "errors": [ { "message": "Field 'user' doesn't exist on type 'Query'", "locations": [ { "line": 2, "column": 3 } ], "fields": [ "query", "user" ] } ]}
- - 人間が判読できるエラーの説明
message - - 構文エラーの場所
locations - - 構文エラーの影響を受けるフィールド
fields
データ検証エラー
すべての必須フィールドが入力され、適切に構築されたミューテーションを提供しても、ビジネスの検証によって失敗する可能性があります。例えば、以下のように広告主が AdSet の入札額を下限値未満に変更したとします。この場合は、HTTP 200 OK レスポンスを以下のデータとともに受け取ります。mutation { updateAdSet(input: { id: "00000000-0000-0000-0000-000000000000", bidding: {amount: 10000} }) { adSet { id } }}
{ "data": { "updateAdSet": null }, "errors": [ { "message": "Amount is below the minimum (20000 micros)", "locations": [ { "line": 2, "column": 3 } ], "path": [ "updateAdSet", "input", "bidding", "amount" ], "code": 422 } ]}
- - 人間が判読できるエラーの説明
message - - 検証エラーの場所
locations - - 無効と判断されたフィールドへの完全修飾された参照
path - - HTTP 状態コードに対応する GraphQL 状態コード
code
制限事項
Reporting API には、過剰な API 呼び出しや濫用的な API 呼び出しを防止するための一定の保護が備わっています。統合が上限を超えている場合は、Tapjoy のアカウントマネージャーやサポートに連絡して、統合を最適化する方法や上限を増やす方法を確認してください。 以下の例は広告主のコンテキストで示されていますが、パブリッシャーの統合にも適用されます。データリテンション
Reporting API は過去 2 年間のデータにアクセスできます。ページ処理
ページ処理タイプをクエリする場合、クライアントは以下を行う必要があります。- または
first引数を指定するlast - 1 ページ 100 ノード以下にする
上記のクエリでは、最大 50 の広告セットが返されます。各セットの最大広告数は 50 です。 コレクション全体をページ処理するには、{ advertiser { adSets(first: 50) { edges { node { id name ads(first: 50) { edges { node { id name } } } } } } }}
afterbefore上記のクエリでは、カーソル位置 "Mg==" から最大 50 個の広告セットが返されます。その位置は、前のクエリから返された endCursor に基づいて決定されます。hasNextPage が false のとき、ページ処理は完了したと見なされます。 ページ処理の詳細については、GraphQL のウェブサイト を参照してください。{ advertiser { adSets(first: 50, after: "Mg==") { edges { node { id name } } pageInfo { endCursor hasNextPage } } }}
呼び出しの複雑さ
スキーマ検証に合格するには、すべての Marketing API 呼び出しが 10,000 回を超えてはなりません。この場合の "呼び出し" とは、リソースのリクエストを指します。GraphQL では、複数の呼び出しを 1 つのクエリにまとめることができるため、1 つのクエリの呼び出しの合計数は、クエリが実行される前に API によって事前に計算されます。 呼び出しの数は、結果から選択されたリソース (キャンペーン、広告セット、広告、アプリ、分析情報など) の数とほぼ等しくなります。 上記の同じ例を考えてみましょう。この例では、クライアントは一度に最大 50 個の広告セットを要求します。各広告セットにつき、クライアントはその広告セットから最大 50 個の広告を要求します。 合計呼び出し数は、以下のように計算します。{ advertiser { adSets(first: 50) { # <= 50 calls edges { node { id name ads(first: 50) { # <= 50 calls edges { node { id name } } } } } } }}
現時点では、1 時間あたりの呼び出し数にレート制限はありません。ただし、これは今後変更される可能性があります。50 = 50 ad sets+50 x 50 = 2500 ads = 2550 calls
分析情報の複雑さ
レポートの分析情報に対してクエリを実行すると、どのようなレベルでも、上記の基本計算には反映されない複雑さのコストが追加で発生します。クエリが実行される日ごとに、さらに 1 回の呼び出しが計算に追加されます。 例を考えてみましょう。この例では、クライアントは一度に最大 50 個の広告セットを要求します。各広告セットにつき、クライアントは 3 つの指標と 1 セグメントにわたる 7 日間分のレポートデータを要求します。 合計呼び出し数は、以下のように計算します。{ advertiser { # 50 calls adSets(first: 50) { edges { node { id name # 7 calls insights(timeRange: {from: "2024-03-01T00:00:00Z", until: "2024-03-08T00:00:00Z"}) { timestamps reports { country impressions conversions spend } } } } } }}
50 = 50 ad sets+50 x 7 = 350 insights = 400 calls