GraphQL レポーティング API により広告出稿者やパブリッシャーがTapjoyプラットフォームからレポーティングデータにアクセスできるようになります。 GraphQL レポーティング API による広告出稿者のユースケースを マーケティング API セクション で、パブリッシャーのユースケースをパブリッシャー API の例 で参照できます。
マーケティング API や パブッリシャー API にアクセスするためには、まず API キーを使用します。このキーは旧ダッシュボードをご利用の場合は https://dashboard.tapjoy.com/reporting/api から取得できます。
LTV プラットフォームをご利用の場合、"Marketing API Key" を使用します。LTVプラットフォームでアプリを選択し、 "設定" -> "アプリ設定" -> "アプリ情報" -> "API Keys" -> "Marketing API Key" から取得します。
リクエストは OAuth2 の標準的な二層認可フローを使用します。 API キー を利用してアクセス トークンを要求し、取得したアクセス トークンを利用してその後のリクエストの認証として使用します。
アクセストークンを取得する手順は こちら を参照してください。
このAPIのエンドポイントは下記の一つのみです:
https://api.tapjoy.com/graphql
このエンドポイントは実行する内容に関わらず同じです。
アクセス トークンを取得すれば、API へのリクエストを行えるようになります。API へのリクエストは、クエリの場合でも更新の場合でも JSON エンコードされた body を HTTP POST で送ります。
リクエスト例:
POST /graphql
Host: api.tapjoy.com
Authorization: Bearer <OAuth Token>
{
"query": "query { user { firstName } }"
}
本 API を使用する際に発生するエラーにはいくつかの種類があります:
利用するシステムに正しく実装されている事を確認するためには、システムがこれらの種類のエラーをどのように処理すべきかを考える必要があります。
下記のそれぞれの種類のエラーは、次のクエリを使用した場合を想定しています:
query {
user {
firstName
lastName
}
}
時折、本APIを使用する際に回復不能なサーバ / ネットワークエラーが発生する場合があります。こうした場合には発生している状況に応じた正しい HTTP ステータスコードが返されます。例えば、弊社のシステムで API が実行出来ない状況では、HTTP レスポンスコード 500 が返ります。
この状況の最善の対応方法は、指数関数的な間隔を空けたリトライを行う事です。
認証 / 承認エラー はいくつかの理由で発生します:
こうした種類の状況の場合、HTTP 200 OK レスポンスで下記のデータを受信します:
{
"errors": [
{
"message": "Authentication could not be verified. Please try again later.",
"code": 403
}
]
}
message
- 人間可読なエラーの記述code
- HTTP ステータスコード と対応する GraphQL のステータスコードこの状況の最善の対応方法は、新しくアクセストークンを取得して再度リクエストする事です。
クエリーと更新(mutation) は文法的に正しいか、データスキーマに合致しているかをまず確認されます。 入力されたクエリーがいずれかのスキーマ検証に失敗した場合、HTTP 200 OK レスポンスで下記のデータを受信します:
{
"errors": [
{
"message": "Field 'user' doesn't exist on type 'Query'",
"locations": [
{
"line": 2,
"column": 3
}
],
"fields": [
"query",
"user"
]
}
]
}
message
- 人間可読なエラーの記述locations
- 文法エラーの位置fields
- 文法エラーにより影響が出るフィールドこの状況の最善の対応方法は、APIドキュメントを再度参照し、使用するクエリをインタラクティブ エクスプローラー でテストする事です。
更新リクエストを必要なフィールドをすべて正しく構成してリクエストした場合でも、ビジネスロジック上の検証により失敗する場合があります。例えば、広告出稿をしていて、AdSetのbidを最小値よりも低く使用したとしましょう::
mutation {
updateAdSet(input: {
id: "00000000-0000-0000-0000-000000000000",
bidding: {amount: 10000}
}) {
adSet {
id
}
}
}
この場合、HTTP 200 OK レスポンスで下記のデータを受信します:
{
"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
- 不正であるとされたフィールドの完全修飾の参照code
- HTTP ステータスコード と対応する GraphQL のステータスコードこの状況の最善の対応方法は、エラーメッセージとともにpathに含まれるフィールドをユーザーに提示する事です。