パフォーマンス向上

このドキュメントでは、アプリケーションのパフォーマンスを向上させるための手法について説明します。一部、概念をわかりやすく説明するために、他の実装済み API の例を使用しています。ただし、ディスプレイ&ビデオ 360 API にも同じ概念が適用されます。

部分リソースを使用した作業

リクエストするデータを必要な部分のみに限定して API 呼び出しのパフォーマンスを向上させる方法もあります。こうすると、アプリケーションで不要なフィールドの転送、解析、保存を行う必要がなくなるため、ネットワーク、CPU、メモリなどのリソースを効率良く利用できるようになります。

部分的レスポンス

デフォルトでは、サーバーは、リクエストを処理した後、リソース全体を返します。パフォーマンスを向上させるには、必要なフィールドのみを送信するようサーバーに要求して、部分レスポンスを受信します。

部分レスポンスをリクエストするには、fields リクエスト パラメータを使用して取得するフィールドを指定します。このパラメータは、レスポンス データを返す任意のリクエストで使用できます。

次の例は、Display & Video 360 API で fields パラメータを使用する方法を示しています。

シンプルなリクエスト: 次の HTTP GET リクエストでは fields パラメータを省略し、リソース全体を取得します。

GET https://displayvideo.googleapis.com/v4/advertisers?partnerId=1

完全なリソース レスポンス: 完全なリソースデータには、次のようなフィールドが含まれます。ここでは、わかりやすくするために多数のフィールドを省略しています。

200 OK

{
 "advertisers": [
  {
   "name": "advertisers/1",
   "advertiserId": "1",
   "partnerId": "1",
   "displayName": "Example Advertiser 1",
   "entityStatus": "ENTITY_STATUS_ACTIVE",
   "updateTime": "2019-01-01T00:00:00.000000Z",
   "generalConfig": {
    "domainUrl": "http://example.com",
    "timeZone": "America/New_York",
    "currencyCode": "USD",
    "address": {
    }
   },
   "adServerConfig": {
    "thirdPartyOnlyConfig": {
    }
   },
   "creativeConfig": {
   },
   "dataAccessConfig": {
    "sdfConfig": {
     "sdfConfig": {
      "version": "VERSION_3_1"
     }
    }
   },
   "integrationDetails": {
   }
  },
  {
   "name": "advertisers/2",
   "advertiserId": "2",
   "partnerId": "1",
   "displayName": "Example Advertiser 2",
   "entityStatus": "ENTITY_STATUS_ACTIVE",
   "updateTime": "2019-01-01T00:00:00.000000Z",
   "generalConfig": {
    "domainUrl": "http://example.com",
    "timeZone": "America/New_York",
    "currencyCode": "USD",
    "address": {
    }
   },
   "adServerConfig": {
    "thirdPartyOnlyConfig": {
    }
   },
   "creativeConfig": {
   },
   "dataAccessConfig": {
    "sdfConfig": {
     "sdfConfig": {
      "version": "VERSION_3_1"
     }
    }
   },
   "integrationDetails": {
   }
  },
  ...
 ],
 "nextPageToken": "..."
}

部分レスポンスのリクエスト: 同じリソースに対する次のリクエストでは、fields パラメータを使用しているため、返されるデータが大幅に少なくなります。

GET https://displayvideo.googleapis.com/v4/advertisers?partnerId=1&fields=advertisers(advertiserId,partnerId,displayName)

部分レスポンス: 上記のリクエストに対するレスポンスとして、サーバーは、各広告主の広告主 ID、表示名、パートナー ID プロパティのみを含む、省略された広告主の配列が格納されたレスポンスを返します(存在する場合)。

200 OK

{
 "advertisers": [
  {
   "advertiserId": "1",
   "partnerId": "1",
   "displayName": "Example Advertiser 1"
  },
  {
   "advertiserId": "2",
   "partnerId": "1",
   "displayName": "Example Advertiser 2"
  },
  ...
 ]
}

JSON オブジェクトであるこのレスポンスには、指定したフィールドとその親オブジェクトしか含まれていないことに注目してください。

次のセクションで、fields パラメータの形式の指定方法について説明し、さらにその後に、レスポンスとして返される具体的な内容について詳細に説明します。

fields パラメータの構文のまとめ

fields リクエスト パラメータ値の形式は、XPath の構文に基づいています。サポートされる構文の概要を以下に示し、次のセクションでその他の例を示します。

  • 複数のフィールドを選択するには、カンマ区切りのリストを使用します。

  • フィールド a 内にネストされているフィールド b を選択するには a/b と指定します。b 内にネストされているフィールド c を選択するには a/b/c と指定します。

  • 配列またはオブジェクトの特定のサブフィールド セットをリクエストする場合は、サブセレクタを使用し、かっこ「( )」の中に式を記述します。

    たとえば、fields=advertisers(advertiserId,generalConfig/domainUrl) と指定すると、advertisers 配列内の各要素について、広告主 ID とドメイン URL のみが返されます。サブフィールドは 1 つだけでもかまいません。たとえば、fields=advertisers(advertiserId) と指定するのと fields=advertisers/advertiserId と指定するのは同じことです。

fields パラメータのその他の使用例

以下にいくつか例を挙げて、fields パラメータ値がレスポンスに与える影響を説明します。

返して欲しいフィールドを特定する(フィールド選択を行う)

fields リクエスト パラメータの値は、フィールドのカンマ区切りのリストであり、各フィールドは、レスポンスのルートからの相対位置で指定します。そのため、list オペレーションを実行する場合、レスポンスはコレクションとなり、通常はリソースの配列が含まれます。1 つのリソースを取得する操作を実行する場合は、そのリソースを基準位置としてフィールドを指定します。選択したフィールドが配列または配列の一部である場合、サーバーはその配列の選択された部分のすべての要素を返します。

コレクション レベルの例を次に示します。

効果
advertisers advertisers 配列内のすべての要素を返します。各要素内のすべてのフィールドが含まれますが、その他のフィールドは含まれません。
advertisers,nextPageToken nextPageToken フィールドと advertisers 配列内のすべての要素を返します。
advertisers/advertiserId advertisers 配列内のすべての要素について、advertiserId のみを返します。

ネストされたフィールドが返される場合、レスポンスにはそのフィールドを含む親オブジェクトも含まれます。明示的に選択されていない限り、親のフィールドにはその他の子のフィールドは含まれません。
advertisers/generalConfig/domainUrl generalConfig オブジェクトの domainUrl フィールドを返します。このオブジェクト自体は advertisers 配列内にネストされています。

リソースレベルの例を次に示します。

効果
advertiserId リクエストされたリソースの advertiserId フィールドを返します。
generalConfig/domainUrl リクエストされたリソースの generalConfig オブジェクトの domainUrl フィールドを返します。
部分選択を使用して個々のフィールドの一部のみをリクエストする

デフォルトでは、リクエストで特定のフィールドを指定すると、サーバーはオブジェクト全体または配列要素全体を返します。特定のサブフィールドだけを含むレスポンスを指定することもできます。それには、下の例のように「( )」というサブ選択の構文を使用します。

効果
advertisers(advertiserId,generalConfig/domainUrl) advertisers 配列内の各要素について、advertiserId と generalConfig domainUrl の値のみを返します。
部分レスポンスの処理

fields クエリ パラメータを含む有効なリクエストを処理した後、サーバーは HTTP 200 OK ステータス コードとともにリクエストされたデータを返します。fields クエリ パラメータにエラーがある場合、またはパラメータが無効な場合、サーバーは、HTTP 400 Bad Request ステータス コードとフィールド選択の問題箇所を示すエラー メッセージ(例: "Invalid field selection a/b")を返します。