성능 향상

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에서는 애플리케이션의 성능을 개선할 수 있는 몇 가지 기술에 대해 설명합니다. 경우에 따라 다른 API 또는 일반적인 API의 예시를 통해 개념을 설명하지만 동일한 개념이 Google Drive API에도 적용됩니다.

gzip을 사용한 압축

각 요청에 필요한 대역폭을 줄이는 쉽고 편리한 한 가지 방법은 gzip 압축을 사용하는 것입니다. 이 경우 결과를 압축 해제하려면 CPU 시간이 추가로 필요하기는 하지만 대신에 네트워크 비용을 절감할 수 있다는 장점이 있습니다.

gzip으로 인코딩된 응답을 받으려면 Accept-Encoding 헤더를 설정하고 사용자 에이전트에 gzip 문자열이 포함되도록 수정해야 합니다. 다음은 gzip 압축을 사용할 수 있도록 적절하게 구성된 HTTP 헤더의 예시입니다.

Accept-Encoding: gzip
User-Agent: my program (gzip)

부분 리소스 작업

API 호출의 성능을 개선하는 또 다른 방법은 관심 있는 데이터 부분만 보내고 받는 것입니다. 이렇게 하면 애플리케이션에서 불필요한 필드를 전송하고 파싱하고 저장하지 않게 되므로 네트워크, CPU, 메모리를 포함한 리소스를 더 효율적으로 사용할 수 있습니다.

다음과 같은 두 가지 유형의 부분 요청이 있습니다.

  • 부분 응답: 응답에 포함할 필드를 지정하는 요청(fields 요청 매개변수 사용)
  • 패치: 변경할 필드만 전송하는 업데이트 요청(PATCH HTTP 동사 사용)

부분 요청을 작성하는 자세한 방법은 다음 섹션에 설명되어 있습니다.

부분 응답

기본적으로 서버에서는 요청을 처리한 후에 전체 리소스 표현을 반환합니다. 더 나은 성능을 위해 서버에 필요한 필드만 전송하도록 요청하여 부분 응답을 받을 수 있습니다.

부분 응답을 요청하려면 fields 요청 매개변수를 사용하여 반환받을 필드를 지정합니다. 응답 데이터를 반환하는 모든 요청에서 이 매개변수를 사용할 수 있습니다.

fields 매개변수는 응답 데이터에만 영향을 주며 전송해야 하는 데이터에는 영향을 주지 않습니다. 리소스를 수정할 때 전송하는 데이터의 양을 줄이려면 패치 요청을 사용하세요.

다음 예시에서는 일반적인(가상의) 'Demo' API에 fields 매개변수를 사용하는 방법을 보여 줍니다.

단순 요청: 이 HTTP GET 요청은 fields 매개변수를 생략하고 전체 리소스를 반환합니다.

https://www.googleapis.com/demo/v1

전체 리소스 응답: 전체 리소스 데이터에는 다음과 같은 필드가 포함됩니다. 여기에는 보기 쉽게 일부 필드만 포함되었으며 다른 많은 필드는 생략되어 있습니다.

{
  "kind": "demo",
  ...
  "items": [
  {
    "title": "First title",
    "comment": "First comment.",
    "characteristics": {
      "length": "short",
      "accuracy": "high",
      "followers": ["Jo", "Will"],
    },
    "status": "active",
    ...
  },
  {
    "title": "Second title",
    "comment": "Second comment.",
    "characteristics": {
      "length": "long",
      "accuracy": "medium"
      "followers": [ ],
    },
    "status": "pending",
    ...
  },
  ...
  ]
}

부분 응답 요청: 같은 리소스에 대한 다음 요청에서는 반환되는 데이터의 양을 대폭 줄이기 위해 fields 매개변수를 사용합니다.

https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)

부분 응답: 위 요청에 대해 서버에서 반환하는 응답에는 종류(kind) 정보와 짧게 줄인 항목(items) 배열만 포함되며, 이 항목 배열에는 각 항목의 HTML 제목 및 길이 특성 정보만 포함됩니다.

200 OK
{
  "kind": "demo",
  "items": [{
    "title": "First title",
    "characteristics": {
      "length": "short"
    }
  }, {
    "title": "Second title",
    "characteristics": {
      "length": "long"
    }
  },
  ...
  ]
}

이 응답은 선택한 필드와 해당 필드가 속한 상위 객체만 포함하는 JSON 객체입니다.

fields 매개변수의 형식을 지정하는 자세한 방법은 다음 부분에서 다루고 있으며, 그 다음 부분에는 응답에서 정확히 무엇이 반환되는지에 대해 자세히 설명되어 있습니다.

fields 매개변수 구문 요약

fields 요청 매개변수의 값 형식은 대략 XPath 구문을 기반으로 합니다. 지원되는 구문은 아래에 요약되어 있으며 이어지는 섹션에서 추가적인 예시를 확인할 수 있습니다.

  • 여러 필드를 선택하려면 쉼표로 구분된 목록을 사용합니다.
  • a 필드 내에 중첩된 b 필드를 선택하려면 a/b를 사용하고, b 내에 중첩된 c 필드를 선택하려면 a/b/c를 사용합니다.

    예외: data: { ... }와 같이 응답이 data 객체 내에 중첩되도록 'data' 래퍼를 사용하는 API 응답의 경우 fields 사양에 'data'를 포함하지 마세요. 필드를 지정할 때 data/a/b와 같이 data 객체를 포함하면 오류가 발생합니다. 대신 fieldsa/b와 같이 지정하세요.

  • 배열 또는 객체의 특정 하위 필드 세트를 요청하려면 하위 선택자를 사용하여 표현식을 괄호 '( )'로 묶습니다.

    예: fields=items(id,author/email)는 items 배열에 포함된 각 요소의 항목 ID와 작성자 이메일만 반환합니다. 하위 필드를 하나만 지정할 수도 있으며, 이때 fields=items(id)fields=items/id와 같습니다.

  • 필요한 경우 필드 선택 구문에 와일드 카드를 사용합니다.

    예: fields=items/pagemap/*는 페이지 지도 내의 모든 객체를 선택합니다.

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

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

참고: 모든 쿼리 매개변수 값과 마찬가지로 fields 매개변수 값도 URL로 인코딩되어야 합니다. 이 문서의 예시에는 보기 쉽도록 인코딩이 생략되어 있습니다.

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

다음은 컬렉션 수준의 몇 가지 예시입니다.
결과
items items 배열의 모든 요소를 반환하며 각 요소의 모든 필드가 포함되지만 다른 필드는 제외됩니다.
etag,items etag 필드 및 items 배열의 모든 요소를 반환합니다.
items/title items 배열에 포함된 모든 요소의 title 필드만 반환합니다.

중첩 필드가 반환되는 경우 응답에는 항상 해당 필드가 속한 상위 객체가 포함됩니다. 명시적으로 함께 선택하지 않은 다른 하위 필드는 상위 필드에 포함되지 않습니다.
context/facets/label context 객체 아래에 중첩된 facets 배열의 모든 구성원에 대해 label 필드만 반환합니다.
items/pagemap/*/title items 배열의 각 요소에 대해 pagemap의 하위 항목인 모든 객체의 title 필드(있는 경우)만 반환합니다.

다음은 리소스 수준의 몇 가지 예시입니다.
결과
title 요청된 리소스의 title 필드를 반환합니다.
author/uri 요청된 리소스에서 author 객체의 uri 하위 필드를 반환합니다.
links/*/href
links의 하위 요소인 모든 객체의 href 필드를 반환합니다.
하위 선택을 사용하여 특정 필드의 일부만 요청
기본적으로 요청에서 특정 필드를 지정하면 서버에서는 해당하는 객체 또는 배열 요소 전체를 반환합니다. 하지만 특정 하위 필드만 포함하는 응답을 지정할 수도 있습니다. 아래 예시와 같이 '( )' 하위 선택 구문을 사용하면 됩니다.
결과
items(title,author/uri) items 배열에 포함된 각 요소에 대해 title 및 author의 uri 값만 반환합니다.

부분 응답 처리

서버는 fields 쿼리 매개변수가 포함된 유효한 요청을 처리한 후 요청된 데이터와 함께 HTTP 200 OK 상태 코드를 반환합니다. fields 쿼리 매개변수에 오류가 있거나 매개변수가 유효하지 않은 경우 서버에서는 HTTP 400 Bad Request 상태 코드와 함께 필드 선택에 어떤 문제가 있는지 알려 주는 오류 메시지(예: "Invalid field selection a/b")를 반환합니다.

다음은 위 소개 섹션에 나와 있는 부분 응답의 예입니다. 요청에서는 fields 매개변수를 사용하여 반환할 필드를 지정합니다.

https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)

부분 응답은 다음과 같습니다.

200 OK
{
  "kind": "demo",
  "items": [{
    "title": "First title",
    "characteristics": {
      "length": "short"
    }
  }, {
    "title": "Second title",
    "characteristics": {
      "length": "long"
    }
  },
  ...
  ]
}

참고: 데이터 페이지 나누기를 위한 쿼리 매개변수(예: maxResultsnextPageToken)를 지원하는 API의 경우 이러한 매개변수를 사용하여 각 쿼리의 결과를 관리 가능한 크기로 줄이세요. 그러지 않으면 부분 응답을 사용해도 성능이 개선되지 않을 수 있습니다.

패치(부분 업데이트)

리소스를 수정할 때 불필요한 데이터가 전송되지 않도록 할 수도 있습니다. 변경하려는 특정 필드의 업데이트된 데이터만 전송하려면 HTTP PATCH 동사를 사용합니다. 이 문서에 설명된 패치 시맨틱스는 이전에 부분 업데이트를 위해 구현되었던 GData 구문과는 다르며 더 간단해졌습니다.

아래의 짧은 예에서는 일부 데이터만 업데이트할 경우 패치를 사용하면 전송해야 하는 데이터가 얼마나 최소화되는지를 보여 줍니다.

이 예시에서는 일반적인(가상의) 'Demo' API 리소스의 제목만 업데이트하기 위한 간단한 패치 요청을 보여 줍니다. 이 리소스에는 comment, characteristics 세트, status 외 여러 필드가 있지만 이 요청은 title 필드만 전송합니다. 수정되는 유일한 필드이기 때문입니다.

PATCH https://www.googleapis.com/demo/v1/324
Authorization: Bearer your_auth_token
Content-Type: application/json

{
  "title": "New title"
}

응답:

200 OK
{
  "title": "New title",
  "comment": "First comment.",
  "characteristics": {
    "length": "short",
    "accuracy": "high",
    "followers": ["Jo", "Will"],
  },
  "status": "active",
  ...
}

서버에서는 200 OK 상태 코드와 함께 업데이트된 리소스의 전체 표현을 반환합니다. title 필드만 패치 요청에 포함되었기 때문에 이 필드 값만 이전과 다릅니다.

참고: 부분 응답 fields 매개변수를 패치와 함께 사용하면 업데이트 요청의 효율을 훨씬 더 높일 수 있습니다. 패치 요청은 요청의 크기만을 줄입니다. 부분 응답은 응답의 크기를 줄입니다. 따라서 양방향으로 전송되는 데이터의 양을 줄이려면 패치 요청과 fields 매개변수를 함께 사용합니다.

패치 요청 구문

패치 요청의 본문에는 수정하려는 리소스 필드만 포함합니다. 부분 응답에서 필드가 속한 상위 항목이 반환되는 것과 마찬가지로, 요청에서 필드를 지정할 때도 해당 필드가 속한 모든 상위 객체를 포함해야 합니다. 수정된 데이터를 전송하면 해당 데이터가 상위 객체의 데이터에 병합됩니다.

  • 추가: 기존에 없던 필드를 추가하려면 새 필드와 해당 값을 지정합니다.
  • 수정: 기존 필드의 값을 변경하려면 필드를 지정하고 새로운 값으로 설정합니다.
  • 삭제: 필드를 삭제하려면 필드를 지정하고 null로 설정합니다. "comment": null를 예로 들 수 있습니다. 또한 전체 객체(변경 가능한 경우)를 null로 설정하여 삭제할 수도 있습니다. Java API 클라이언트 라이브러리를 사용 중인 경우 Data.NULL_STRING을 대신 사용하세요. 자세한 내용은 JSON null을 참조하세요.

배열 참고사항: 배열이 포함된 패치 요청은 기존 배열을 사용자가 제공하는 배열로 바꿉니다. 배열의 항목을 부분적으로 수정하거나 추가하거나 삭제할 수는 없습니다.

읽기-수정-쓰기 주기로 패치 사용

먼저 수정하려는 데이터를 포함하는 부분 응답을 가져오는 것이 유용한 경우도 있습니다. ETag를 사용하는 리소스의 경우 If-Match HTTP 헤더에 현재 ETag를 제공해야 올바르게 업데이트되므로 이 방법이 특히 중요합니다. 데이터를 구한 후, 변경하고자 하는 값을 수정할 수 있으며, 패치 요청과 함께 수정된 부분에 대한 표시를 반송할 수 있습니다. 다음은 데모 리소스가 ETag를 사용한다는 것으로 가정한 예시입니다.

GET https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics
Authorization: Bearer your_auth_token

다음은 부분 응답입니다.

200 OK
{
  "etag": "ETagString"
  "title": "New title"
  "comment": "First comment.",
  "characteristics": {
    "length": "short",
    "level": "5",
    "followers": ["Jo", "Will"],
  }
}

다음 패치 요청은 위 응답을 기반으로 합니다. 아래와 같이 이 요청은 fields 매개변수를 사용하여 패치 응답에서 반환되는 데이터를 제한하기도 합니다.

PATCH https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics
Authorization: Bearer your_auth_token
Content-Type: application/json
If-Match: "ETagString"
{
  "etag": "ETagString"
  "title": "",                  /* Clear the value of the title by setting it to the empty string. */
  "comment": null,              /* Delete the comment by replacing its value with null. */
  "characteristics": {
    "length": "short",
    "level": "10",              /* Modify the level value. */
    "followers": ["Jo", "Liz"], /* Replace the followers array to delete Will and add Liz. */
    "accuracy": "high"          /* Add a new characteristic. */
  },
}

서버에서는 200 OK HTTP 상태 코드와 함께 업데이트된 리소스의 부분 표현을 반환합니다.

200 OK
{
  "etag": "newETagString"
  "title": "",                 /* Title is cleared; deleted comment field is missing. */
  "characteristics": {
    "length": "short",
    "level": "10",             /* Value is updated.*/
    "followers": ["Jo" "Liz"], /* New follower Liz is present; deleted Will is missing. */
    "accuracy": "high"         /* New characteristic is present. */
  }
}

패치 요청 직접 작성

일부 패치 요청의 경우 이전에 가져온 데이터를 기반으로 해야 합니다. 예를 들어 배열에 항목을 추가하면서 기존 배열 요소를 잃고 싶지 않은 경우 먼저 기존 데이터를 가져와야 합니다. 마찬가지로 API에서 ETag를 사용하는 경우 리소스를 업데이트하기 위해서는 요청과 함께 이전의 ETag 값을 전송해야 합니다.

참고: ETag를 사용 중인 경우 "If-Match: *" HTTP 헤더를 사용하여 패치가 처리되도록 할 수 있습니다.  이렇게 하면 쓰기 전에 읽기를 수행하지 않아도 됩니다.

하지만 그 외의 경우에는 기존 데이터를 먼저 가져오지 않고 패치 요청을 직접 작성할 수 있습니다. 예를 들어 필드를 새로운 값으로 업데이트하거나 새 필드를 추가하는 패치 요청을 간편하게 설정할 수 있습니다. 예를 들면 다음과 같습니다.

PATCH https://www.googleapis.com/demo/v1/324?fields=comment,characteristics
Authorization: Bearer your_auth_token
Content-Type: application/json

{
  "comment": "A new comment",
  "characteristics": {
    "volume": "loud",
    "accuracy": null
  }
}

이 요청을 실행할 경우 comment 필드에 기존 값이 있으면 새로운 값이 기존 값을 덮어쓰고, 그렇지 않으면 comment 필드가 새로운 값으로 설정됩니다. 마찬가지로 볼륨(volume) 특성이 있으면 해당 값이 덮어써지고, 그렇지 않으면 새로 생성됩니다. 또한 accuracy 필드는 설정된 경우 제거됩니다.

패치에 대한 응답 처리

API는 올바른 패치 요청을 처리한 후 200 OK HTTP 응답 코드와 함께 수정된 리소스의 전체 표현을 반환합니다. API에 ETag가 사용되는 경우에는 PUT을 사용할 때와 마찬가지로 패치 요청이 성공적으로 처리되면 서버에서 ETag 값을 업데이트합니다.

fields 매개변수를 사용하여 반환되는 데이터의 양을 줄이지 않으면 패치 요청에서 전체 리소스 표현을 반환합니다.

패치 요청으로 인해 새로운 리소스 상태의 구문 또는 의미 체계가 올바르지 않게 되면 서버에서 400 Bad Request 또는 422 Unprocessable Entity HTTP 상태 코드를 반환하며 리소스 상태는 변경되지 않은 채 유지됩니다. 예를 들어 필수 필드의 값을 삭제하려고 하면 서버에서 오류가 반환됩니다.

PATCH HTTP 동사가 지원되지 않는 경우 대체 표기법

방화벽에서 HTTP PATCH 요청을 허용하지 않으면 아래와 같이 HTTP POST 요청을 실행하고 재정의 헤더를 PATCH로 설정합니다.

POST https://www.googleapis.com/...
X-HTTP-Method-Override: PATCH
...

패치와 업데이트의 차이점

실제로 HTTP PUT 동사를 사용하는 업데이트 요청용으로 데이터를 전송할 때는 필수항목이거나 선택항목인 필드만 전송해야 합니다. 서버에서 설정된 필드의 값을 전송하면 이 값은 무시됩니다. 이는 부분 업데이트를 수행하는 또 다른 방법처럼 보일 수도 있지만 이 접근 방식에는 몇 가지 제한사항이 있습니다. HTTP PUT 동사를 사용하는 업데이트의 경우 필수 매개변수를 제공하지 않으면 요청이 실패하고 선택적 매개변수를 제공하지 않으면 이전에 설정한 데이터가 삭제됩니다.

이러한 이유로 패치를 사용하는 것이 훨씬 안전합니다. 변경하려는 필드의 데이터만 제공하면 되며, 생략한 필드는 삭제되지 않습니다. 반복 요소 또는 배열의 경우에만 이 규칙에 예외가 적용됩니다. 즉, 모두 생략하면 이전 상태가 그대로 유지되고, 이 중 하나라도 제공하면 전체 세트가 제공한 세트로 대체됩니다.

일괄 요청

일괄 처리를 위한 한 가지 구체적인 접근 방식인 Global HTTP Batch 엔드포인트(www.googleapis.com/batch)는 Google Developers 블로그에 공지된 바와 같이 2020년 8월 12일부로 종료되었습니다. 이 페이지의 나머지 부분에서 설명하고 있듯이, 다른 일괄 처리 방법도 여전히 사용 가능합니다. 코드가 Global HTTP Batch 엔드포인트를 사용하는 경우 블로그 게시물을 참조하여 API별 HTTP Batch 엔드포인트(www.googleapis.com/batch/API/VERSION) 등, 다른 접근 방식을 사용하도록 전환하는 방법을 확인하세요.

이 문서에서는 API 호출을 일괄 처리하여 클라이언트가 수행해야 하는 HTTP 연결 수를 줄이는 방법을 보여줍니다.

이 문서에서는 특히 HTTP 요청을 보내 일괄 요청을 하는 방법을 다룹니다. 대신 Google 클라이언트 라이브러리를 사용하여 일괄 요청을 하는 경우 클라이언트 라이브러리의 문서를 참조하세요.

개요

클라이언트가 수행하는 각 HTTP 연결에는 어느 정도의 오버헤드가 수반됩니다. Google Drive API는 일괄 처리를 지원하므로 클라이언트에서 단일 HTTP 요청에 여러 개의 API 호출을 넣을 수 있습니다.

다음과 같은 경우에 일괄 처리를 사용할 수 있습니다.

  • 다수의 파일에 대한 메타데이터를 가져오는 중입니다.
  • 메타데이터 또는 속성 일괄 업데이트
  • 많은 수의 파일 권한 변경(예: 새 사용자 또는 그룹 추가)
  • 로컬 클라이언트 데이터를 처음으로 또는 오랜 기간 동안 오프라인 상태에서 동기화합니다.

각각의 경우에 각 호출을 개별적으로 보내는 대신, 하나의 HTTP 요청으로 함께 그룹화할 수 있습니다. 모든 내부 요청은 동일한 Google API로 이동해야 합니다.

단일 일괄 요청에서 호출 수는 100개로 제한됩니다. 이보다 많은 호출을 해야 하는 경우 일괄 요청을 여러 개 사용합니다.

참고: Google Drive API용 일괄 처리 시스템은 OData 일괄 처리 시스템과 동일한 구문을 사용하지만 시맨틱스는 다릅니다.

참고: 호출이 100개를 초과하는 일괄 요청은 오류가 발생할 수 있습니다.

참고: 각 내부 요청의 URL 길이는 8,000자(영문 기준)로 제한됩니다.

참고: 현재 Google Drive에서는 업로드 또는 다운로드의 미디어 일괄 작업을 지원하지 않습니다.

일괄 처리 세부정보

일괄 요청은 하나의 HTTP 요청으로 결합된 여러 API 호출로 구성되며, 이 요청을 API 검색 문서에 지정된 batchPath로 보낼 수 있습니다. 기본 경로는 /batch/api_name/api_version입니다. 이 섹션에서는 일괄 처리 구문을 세부적으로 설명하며 뒷부분에서 예시를 제시합니다.

참고: n 요청 집합은 사용량 한도가 1개가 아닌 n 요청으로 계산됩니다. 일괄 요청은 처리 전에 일련의 요청으로 분리됩니다.

일괄 요청의 형식

일괄 요청은 여러 Google Drive API 호출이 포함된 단일 표준 HTTP 요청이며 multipart/mixed 콘텐츠 유형을 사용합니다. 이 기본 HTTP 요청 내의 각 부분에는 중첩된 HTTP 요청이 포함되어 있습니다.

각 부분은 자체 Content-Type: application/http HTTP 헤더로 시작됩니다. 선택사항인 Content-ID 헤더가 있는 경우도 있습니다. 그러나 부분 헤더는 부분의 시작을 표시하기 위해 있을 뿐이며 중첩된 요청과는 별개입니다. 서버에서 일괄 요청을 개별 요청으로 해체하면 부분 헤더는 무시됩니다.

각 부분의 본문은 자체 동사와 URL, 헤더, 본문을 포함하며 그 자체로 완전한 HTTP 요청입니다. HTTP 요청은 URL의 경로 부분만 포함해야 합니다. 전체 URL은 일괄 요청에서 허용되지 않기 때문입니다.

외부 일괄 요청의 HTTP 헤더(Content-Type과 같은 Content- 헤더 제외)는 일괄 처리되는 각 요청에 모두 적용됩니다. 특정 HTTP 헤더를 외부 요청과 개별 호출에 모두 지정하는 경우 개별 호출 헤더의 값이 외부 일괄 요청 헤더의 값을 재정의합니다. 개별 호출의 헤더는 해당 호출에만 적용됩니다.

예를 들어 특정 호출에 승인 헤더를 제공하는 경우 이 헤더는 해당 호출에만 적용됩니다. 외부 요청에 승인 헤더를 제공하는 경우 이 헤더는 개별 호출에서 자체 승인 헤더로 재정의하지 않는 이상 모든 개별 호출에 적용됩니다.

서버는 일괄 요청을 수신하면 외부 요청의 쿼리 매개변수와 헤더를 각 부분에 적절히 적용한 다음 각 부분을 개별 HTTP 요청처럼 취급합니다.

일괄 요청 응답

서버 응답은 multipart/mixed 콘텐츠 유형의 단일 표준 HTTP 응답입니다. 각 부분은 일괄 요청에 포함된 요청 중 하나에 대한 응답이며 요청 순서와 동일한 순서로 표시됩니다.

요청의 부분과 마찬가지로 각 응답 부분에는 상태 코드, 헤더, 본문을 포함한 완전한 HTTP 응답이 포함됩니다. 또한 요청의 부분과 마찬가지로 각 응답 부분 앞에는 Content-Type 헤더가 붙어 부분의 시작을 표시합니다.

요청의 특정 부분에 Content-ID 헤더가 있는 경우 해당하는 응답 부분에도 일치하는 Content-ID 헤더가 표시되며 원래 값 앞에는 문자열 response-가 붙습니다(다음 예시 참조).

참고: 서버는 호출을 임의의 순서로 수행할 수 있습니다. 지정한 순서에 따라 실행된다고 생각하면 안 됩니다. 2개의 호출이 지정된 순서에 따라 실행되도록 하려면 1개의 요청으로 두 호출을 보내면 안 됩니다. 첫 번째 호출을 단독으로 보낸 다음 첫 번째 호출의 응답을 기다렸다가 두 번째 호출을 보내야 합니다.

다음 예시에서는 Google Drive API를 사용한 일괄 처리를 사용하는 방법을 보여줍니다.

일괄 요청 예

POST https://www.googleapis.com/batch/drive/v3
Accept-Encoding: gzip
User-Agent: Google-HTTP-Java-Client/1.20.0 (gzip)
Content-Type: multipart/mixed; boundary=END_OF_PART
Content-Length: 963

--END_OF_PART Content-Length: 337 Content-Type: application/http content-id: 1 content-transfer-encoding: binary

POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id Authorization: Bearer authorization_token Content-Length: 70 Content-Type: application/json; charset=UTF-8

{ "emailAddress":"example@appsrocks.com", "role":"writer", "type":"user" } --END_OF_PART Content-Length: 353 Content-Type: application/http content-id: 2 content-transfer-encoding: binary

POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id&sendNotificationEmail=false Authorization: Bearer authorization_token Content-Length: 58 Content-Type: application/json; charset=UTF-8

{ "domain":"appsrocks.com", "role":"reader", "type":"domain" } --END_OF_PART--

일괄 응답 예시

이전 섹션의 요청 예에 대한 응답입니다.

HTTP/1.1 200 OK
Alt-Svc: quic=":443"; p="1"; ma=604800
Server: GSE
Alternate-Protocol: 443:quic,p=1
X-Frame-Options: SAMEORIGIN
Content-Encoding: gzip
X-XSS-Protection: 1; mode=block
Content-Type: multipart/mixed; boundary=batch_6VIxXCQbJoQ_AATxy_GgFUk
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
Date: Fri, 13 Nov 2015 19:28:59 GMT
Cache-Control: private, max-age=0
Vary: X-Origin
Vary: Origin
Expires: Fri, 13 Nov 2015 19:28:59 GMT

--batch_6VIxXCQbJoQ_AATxy_GgFUk Content-Type: application/http Content-ID: response-1

HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Date: Fri, 13 Nov 2015 19:28:59 GMT Expires: Fri, 13 Nov 2015 19:28:59 GMT Cache-Control: private, max-age=0 Content-Length: 35

{ "id": "12218244892818058021i" }

--batch_6VIxXCQbJoQ_AATxy_GgFUk Content-Type: application/http Content-ID: response-2

HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Date: Fri, 13 Nov 2015 19:28:59 GMT Expires: Fri, 13 Nov 2015 19:28:59 GMT Cache-Control: private, max-age=0 Content-Length: 35

{ "id": "04109509152946699072k" }

--batch_6VIxXCQbJoQ_AATxy_GgFUk--

요청에서 특정 필드 반환

기본적으로 서버는 사용되는 메서드와 관련된 기본 리소스 필드 집합을 반환합니다. 예를 들어 files.list 메서드는 id, name, mimeType만 반환할 수 있습니다. 이러한 필드는 필요한 정확한 필드가 아닐 수도 있습니다. 다른 필드를 반환해야 하는 경우 파일의 특정 필드 반환을 참조하세요.