성능 향상

이 문서에서는 애플리케이션의 성능을 개선하는 데 사용할 수 있는 몇 가지 기술을 설명합니다. 경우에 따라 다른 구현된 API의 예시를 통해 개념을 설명합니다. 하지만 Display & Video 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만 반환합니다. 하위 필드를 하나만 지정할 수도 있으며, 이때 fields=advertisers(advertiserId)fields=advertisers/advertiserId와 같습니다.

fields 매개변수 사용 방법의 추가 예시

아래 예시에서는 fields 매개변수 값이 응답에 미치는 영향을 설명합니다.

반환받을 필드 지정(또는 필드 선택)

fields 요청 매개변수 값은 쉼표로 구분된 필드 목록이며 각 필드는 응답의 루트를 기준으로 지정됩니다. 따라서 list 작업을 수행하는 경우에는 응답으로 컬렉션이 반환되며, 일반적으로 이 응답에는 리소스 배열이 포함됩니다. 하나의 리소스를 반환하는 작업을 수행하는 경우에는 리소스를 기준으로 필드가 지정됩니다. 선택한 필드가 배열 (또는 배열의 일부)인 경우 서버는 배열의 모든 요소 중에서 선택된 부분을 반환합니다.

다음은 컬렉션 수준의 몇 가지 예입니다.

효과
advertisers advertisers 배열의 모든 요소를 반환하며 각 요소의 모든 필드가 포함되지만 다른 필드는 제외됩니다.
advertisers,nextPageToken nextPageToken 필드와 advertisers 배열의 모든 요소를 반환합니다.
advertisers/advertiserId advertisers 배열의 모든 요소에 대해 advertiserId만 반환합니다.

중첩 필드가 반환될 때마다 응답에는 해당 필드가 속한 상위 객체가 포함됩니다. 명시적으로 함께 선택하지 않은 다른 하위 필드는 상위 필드에 포함되지 않습니다.
advertisers/generalConfig/domainUrl advertisers 배열 아래에 중첩된 generalConfig 객체의 domainUrl 필드를 반환합니다.

다음은 리소스 수준의 몇 가지 예입니다.

효과
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")를 반환합니다.