Google 데이터 프로토콜에서의 일괄 처리

일괄 처리를 사용하면 각 작업을 개별적으로 제출할 필요 없이 단일 요청으로 여러 작업을 실행할 수 있습니다.

참고: 일괄 작업을 수행하려면 최신 버전의 Google Data API 클라이언트 라이브러리를 사용해야 합니다. 자바스크립트 클라이언트 라이브러리에서는 일괄 작업이 지원되지 않습니다.

대상

이 문서는 일괄 처리를 사용하여 단일 요청으로 여러 작업을 제출하려는 프로그래머를 대상으로 합니다.

이 문서에서는 사용자가 GData 자바 클라이언트 라이브러리 사용에 익숙하다고 가정합니다. 이 문서의 예시에서는 자바 클라이언트 라이브러리를 사용하여 일괄 작업을 실행하는 방법을 보여줍니다.

이 문서의 예는 Google Base Data API에만 해당합니다. 하지만 다른 서비스에서도 일괄 기능을 제공할 수 있습니다.

참고: 프로토콜과 일반 절차는 다른 클라이언트 라이브러리의 경우와 동일하지만 일괄 요청을 처리하는 구체적인 방법은 다를 수 있습니다. 클라이언트 라이브러리별 문서를 참조하세요.

소개

GData 일괄 처리 피드를 사용하면 여러 삽입, 업데이트, 삭제, 쿼리 작업을 수집한 후 한 번에 제출 및 실행할 수 있습니다.

예를 들어 다음 피드에는 네 가지 작업이 포함됩니다.

<feed>
  <entry>
    <batch:operation type="insert"/>
    ... what to insert ...
  </entry> 
  <entry>
    <batch:operation type="update"/>
    ... what to update ...
  </entry>
  <entry>
    <batch:operation type="delete"/>
    ... what to delete ...
  </entry>
  <entry>
    <batch:operation type="query"/>
    ... what to query ...
  </entry>
</feed>

서비스는 요청된 변경사항을 최대한 많이 실행하고 각 작업의 성공 또는 실패를 평가하는 데 사용할 수 있는 상태 정보를 반환합니다.

서비스는 배치에 포함된 작업 중 일부가 성공하지 못하는 경우에도 배치 내의 각 작업을 실행하려고 시도합니다.

일괄 요청 제출

일괄 요청은 HTTP POST로 배치 URL에 전송해야 합니다. 서로 다른 피드는 서로 다른 일괄 작업을 지원합니다. 읽기 전용 피드는 쿼리만 지원합니다.

피드를 쿼리하면 해당 피드가 일괄 작업을 지원하는지 확인할 수 있습니다. 피드에 피드 수준에서 '일괄' 연결 관계가 포함되어 있으면 피드가 일괄 작업을 지원함을 나타냅니다.

'일괄' 링크 관계는 rel="http://schemas.google.com/g/2005#batch"가 있는 <link> 요소입니다. 링크 관계의 href 속성은 일괄 작업의 피드 문서가 게시될 수 있는 URL을 정의합니다.

예를 들어 GET http://www.google.com/base/feeds/items(일반 Google Base 'items' 피드)를 실행하면 다음과 같은 응답이 표시될 수 있습니다.

<feed xmlns=...
  <id>http://www.google.com/base/feeds/items</id>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  ...
</feed> 

이 예시에서 배치 URL은 http://www.google.com/base/feeds/items/batch입니다.

일괄 작업 피드 작성

작업 피드에는 삽입, 업데이트, 삭제, 쿼리할 항목 목록이 포함됩니다. 각 작업은 <batch:operation type="insert|update|delete|query"/> 요소로 정의됩니다.

이 요소는 <feed> 요소의 직계 하위 요소이거나 피드의 모든 항목의 직계 하위 요소 또는 둘 다일 수 있습니다. 항목에 포함된 경우 해당 항목에 실행할 작업을 지정합니다. 이 요소를 피드에 포함하면 이 요소가 <batch:operation/> 요소가 없는 항목에서 실행할 기본 작업을 지정합니다.

항목이나 피드 모두 작업을 지정하지 않으면 기본 작업은 insert입니다.

애플리케이션은 단일 일괄 피드의 동일한 항목에 여러 작업을 적용해서는 안 됩니다. 동일한 항목에 여러 작업을 지정하면 결과가 명확하지 않습니다.

성능 개선을 위해 작업은 요청한 순서대로 처리되지 않을 수 있습니다. 하지만 최종 결과는 항목이 순서대로 처리된 경우와 항상 동일합니다.

서버에 보내는 XML의 바이트 수는 1MB (1,048,576바이트)를 초과할 수 없습니다. 일반적으로 총 바이트 크기가 1MB를 초과하지 않는 한 요청 가능한 작업 수에는 제한이 없습니다. 그러나 일부 서비스에는 추가 제약 조건이 적용될 수 있습니다.

일괄 작업을 사용하려면 일괄 네임스페이스 선언을 <feed> 요소에 속성으로 추가해야 합니다.

<feed 
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  ...
  xmlns:batch="http://schemas.google.com/gdata/batch">

삽입 작업

삽입 작업은 다음과 같이 표시됩니다.

<batch:operation type="insert">

삽입 작업은 항목 POST와 동일합니다. 작업이 성공하면 업데이트된 항목 <id> 요소와 <batch:status code="201"/> 요소가 포함된 전체 항목 콘텐츠가 반환됩니다.

다음은 성공적인 삽입 요청의 예입니다.

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

다음은 성공적인 삽입 요청에 대한 응답의 예입니다.

<entry>
  <batch:status code="201"/>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <link rel="self" type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/17437536661927313949"/>
  <title type="text">...</title>
  <content type="html">...</content>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

업데이트 작업

<batch:operation type="update">

업데이트 작업은 항목의 <id> 요소에서 참조되는 URL에서 PUT를 실행하는 것과 같습니다. 작업이 성공하면 전체 항목 콘텐츠가 <batch:status code="200"/> 요소와 함께 반환됩니다.

참고: 특정 피드의 경우 일괄 업데이트 요청으로 항목의 rel="edit" 링크도 지정해야 합니다. 여기에는 Google 데이터 프로토콜의 v1 스타일인 낙관적 동시 실행을 지원하는 피드와 URL인 ID가 없는 피드가 포함됩니다.

다음은 업데이트 요청의 예입니다.

<entry>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ...
</entry>

다음은 성공적인 응답의 예입니다.

<entry>
  <batch:status code="200"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ... 
</entry>

참고: 일부 피드는 의도치 않게 다른 사용자의 변경사항을 수정하지 못하도록 강력한 ETag를 사용합니다. 이러한 피드 중 하나의 항목에 대해 일괄 업데이트를 요청할 때는 항목의 gd:etag 속성에 ETag 값을 제공해야 합니다. 예: <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="update"/>...

부분 업데이트 작업

부분 업데이트를 지원하는 피드의 경우 일괄 요청에도 사용할 수 있습니다. 부분 업데이트 작업은 항목의 <id> 요소에서 참조되는 URL에서 PATCH를 실행하는 것과 같습니다. 작업이 성공하면 전체 항목 콘텐츠가 <batch:status code="200"/> 요소와 함께 반환됩니다.

참고: 특정 피드의 경우 일괄 업데이트 요청으로 항목의 rel="edit" 링크도 지정해야 합니다. 여기에는 Google 데이터 프로토콜의 v1 스타일인 낙관적 동시 실행을 지원하는 피드와 URL인 ID가 없는 피드가 포함됩니다.

<batch:operation type="patch"/>

다음은 부분 업데이트 요청의 예입니다.

<entry gd:fields="content" gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
</entry>

다음은 성공적인 응답의 예입니다.

<entry gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <batch:status code="200"/>
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
  <content></content>
  ...rest of the entry...
</entry>

작업 삭제

<batch:operation type="delete">

삭제 작업은 항목의 <id> 요소에서 참조하는 URL에서 DELETE를 실행하는 것과 같습니다. 삭제 작업의 경우 <id> 요소만 전송하면 항목을 삭제할 수 있습니다. batch: 네임스페이스에 없는 요소에 제공한 기타 정보는 모두 무시됩니다. 작업이 성공하면 ID가 동일한 항목이 <batch:status code="200"/> 요소와 함께 반환됩니다.

참고: 특정 피드의 경우 일괄 삭제 요청으로 항목의 rel="edit" 링크도 지정해야 합니다. 여기에는 Google 데이터 프로토콜의 v1 스타일인 낙관적 동시 실행을 지원하는 피드와 URL인 ID가 없는 피드가 포함됩니다.

다음은 삭제 요청의 예입니다.

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
</entry>

다음은 성공적인 응답의 예입니다.

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:status code="200" reason="Success"/>
</entry>

참고: 일부 피드는 의도치 않게 다른 사용자의 변경사항을 수정하지 못하도록 강력한 ETag를 사용합니다. 이러한 피드 중 하나의 항목에 대해 일괄 삭제를 요청할 때는 항목의 gd:etag 속성에 ETag 값을 제공해야 합니다. 예: <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="delete"/>...

쿼리 작업

<batch:operation type="query">

쿼리 작업은 항목의 <id> 요소에서 참조되는 URL에서 GET를 실행하는 것과 같습니다. 작업이 성공하면 전체 항목 콘텐츠가 반환됩니다.

참고: 특정 피드의 경우 일괄 쿼리 요청으로 항목의 rel="self" 링크도 지정해야 합니다. 여기에는 ID가 URL이 없는 피드가 포함됩니다.

다음은 쿼리 요청의 예입니다.

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
</entry>

다음은 성공적인 응답의 예입니다.

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
  <batch:status code="200" reason="Success"/>
   ...
</entry>

추적 작업

GData 항목 결과가 반드시 요청과 동일한 순서로 반환되지는 않습니다. 식별자를 사용하면 전체 기간을 대상으로 작업을 추적할 수 있습니다.

업데이트, 삭제, 쿼리 작업의 경우 항목 자체의 ID를 사용하여 작업을 추적할 수 있습니다.

삽입 작업의 경우 ID가 없으므로 작업 식별자를 전달할 수 있습니다. 이 식별자는 결과 항목을 요청 항목에 연결하는 데 사용할 수 있습니다. 작업 식별자는 <batch:id> 요소에 전달됩니다.

각 작업에 대해 GData는 작업의 성공 또는 실패 여부를 명시하는 응답을 반환합니다. 각 응답은 관련 항목을 식별합니다. 업데이트, 삭제, 쿼리 작업 또는 성공적인 삽입 작업의 경우 항상 항목 ID가 반환됩니다. 배치 ID를 지정한 경우에도 반환됩니다. 실패한 삽입 작업에는 연결된 항목 ID가 없으므로 배치 ID만 반환됩니다.

전체 작업 배치를 다시 제출할 필요 없이 각 작업의 식별자를 사용하여 실패한 작업만 다시 시도할 수 있습니다.

<batch:id>의 콘텐츠는 클라이언트가 정의한 문자열 값이며, 해당하는 응답 항목에 다시 표시됩니다.클라이언트가 응답을 원래 요청의 항목과 연관짓는 데 도움이 되는 값을 지정할 수 있습니다. 이 요소는 작업이 실패하더라도 해당하는 항목에 그대로 반영됩니다. GData는 이 배치 ID의 콘텐츠를 저장하거나 해석하지 않습니다.

다음 예는 일괄 작업 피드를 보여줍니다. <batch:id> 요소는 이 작업에 itemB 라벨을 지정합니다.

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemB</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
</entry>

다음 예시는 이 작업에 대한 응답으로 반환된 일괄 상태 항목을 보여줍니다.

<entry>
  <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
  <published>2006-07-11T14:51:43.560Z</published>
  <updated>2006-07-11T14:51: 43.560Z</updated>
  <title type="text">...</title>
  <content type="html">...</content>
  <link rel="self" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <link rel="edit" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <g:item_type>recipes</g:item_type>
  <batch:operation type="insert"/>
  <batch:id>itemB</batch:id>
  <batch:status code="201" reason="Created"/>
</entry>

상태 코드 처리

상태 코드는 다음 요소로 표현됩니다.

<batch:status code="200|201|404|500|..." reason="reason" [content-type="type"]/>

응답 피드의 각 항목에는 하나의 <batch:status> 요소가 포함됩니다. 이 요소는 작업을 실행하는 동안 발생한 상황을 설명합니다. 일괄 작업의 일부로 작업이 개별적으로 전송된 경우 전송되었을 수 있는 HTTP 응답을 모방합니다.

응답에서 각 항목의 <batch:status> 요소를 확인하여 연결된 작업이 성공적으로 처리되었는지 확인해야 합니다. code="n" 속성에는 GData 상태 코드가 포함되어 있습니다.

상태 설명

<batch:status> 요소의 reason="reason" 속성에는 작업 상태에 관한 더 자세한 설명이 포함됩니다.

콘텐츠 유형

<batch:status> 요소의 content-type="type" 속성에는 <batch:status> 요소에 포함된 데이터의 MIME 유형이 포함되어 있습니다. HTTP 상태 응답의 Content-Type 헤더에 해당합니다. 이 속성은 선택사항입니다.

콘텐츠 유형이 설정되면 <batch:status> 요소의 본문이 항목을 처리하는 동안 발생한 문제를 설명합니다.

중단된 작업 식별

중단된 작업의 응답에는 다음 요소가 포함됩니다.

<batch:interrupted reason="reason" success="N" failures="N" parsed="N">

이 요소는 일괄 처리가 중단되었고 중단 원인을 복구하려는 모든 시도가 실패했음을 의미합니다. 일부 항목이 이미 성공적으로 처리되었을 수도 있습니다. 이 시점 이전에 성공한 것으로 보고되지 않은 모든 항목이 취소되었습니다.

이 요소는 매우 일반적이지 않으며 일반적으로 요청 본문으로 보낸 피드가 올바른 XML 형식이 아님을 나타냅니다.

<batch:status> 요소와 마찬가지로 짧은 상태 코드는 reason 속성에서 확인할 수 있습니다. 더 긴 응답은 요소 내에 있을 수도 있습니다.

일괄 작업 및 상태 피드의 예

다음은 서버로 전송할 수 있는 일괄 작업 피드입니다. 이 피드는 서버에 2개의 항목을 삭제하고 2개의 새 항목을 추가하도록 요청합니다. 아래 요소에 강조표시된 것처럼 <feed> 요소에는 배치의 네임스페이스 삭제가 포함되어야 합니다.

POST : http://www.google.com/base/feeds/items/batch
<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <title type="text">My Batch Feed</title>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemA</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemB</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
</feed>

두 삽입은 작동했지만 두 삭제 중 하나는 실패했다고 가정해 보겠습니다. 이 경우 일괄 상태 피드는 다음과 같습니다. 항목이 일괄 작업 피드와 비교하여 재정렬되었습니다.

<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <id>http://www.google.com/base/feeds/items</id>
  <updated>2006-07-11T14:51:42.894Z</updated>
  <title type="text">My Batch</title>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel=" http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  <entry>
    <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
    <published>2006-07-11T14:51:43.560Z</published>
    <updated>2006-07-11T14:51: 43.560Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemB</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/11974645606383737963</id>
    <published>2006-07-11T14:51:43.247Z</published>
    <updated>2006-07-11T14:51: 43.247Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemA</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <updated>2006-07-11T14:51:42.894Z</updated>
    <title type="text">Error</title>
    <content type="text">Bad request</content>
    <batch:status code="404"
      reason="Bad request"
      content-type="application/xml">
      <errors>
        <error type="request" reason="Cannot find item"/>
      </errors>
    </batch:status>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <updated>2006-07-11T14:51:43.246Z</updated>
    <content type="text">Deleted</content>
    <batch:operation type="delete"/>
    <batch:status code="200" reason="Success"/>
  </entry>
</feed>

GData 자바 클라이언트 라이브러리의 일괄 처리 기능 사용

이 섹션에서는 GData 자바 클라이언트 라이브러리의 일괄 처리 기능을 사용하여 삽입, 업데이트 또는 삭제 요청 그룹을 제출하는 방법을 설명합니다.

이 섹션의 예시에서는 Google Base API를 사용합니다.

먼저 표준 GData 및 Google Base 클래스 외에 필요한 클래스를 가져옵니다.

import com.google.gdata.data.batch.*;
import com.google.api.gbase.client.*;

일괄 요청을 제출하려면 피드에서 일괄 URL을 가져와야 합니다. 다음 코드 스니펫은 feed가 피드에 대한 정보를 포함하는 GoogleBaseFeed 객체라고 가정하고 이 작업을 실행하는 방법을 보여줍니다.

Link batchLink = feed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
if (batchLink != null) {
  URL batchUrl = new URL(batchLink.getHref());
  ... // batch handling
} else {
  // batching is not supported for this feed
}

다음 코드 스니펫은 한 작업에 두 항목을 삽입하는 피드를 준비합니다.

GoogleBaseEntry entry1 = new GoogleBaseEntry();
...   // initialize entry 1 content
BatchUtils.setBatchId(entry1, "A"); // A is the local batch ID for this entry
feed.addEntry(entry1);
GoogleBaseEntry entry2 = new GoogleBaseEntry();
... // initialize entry 2 content
BatchUtils.setBatchId(entry2, "B"); // B is the local batch ID for this entry
feed.addEntry(entry2);

이 예시의 코드는 이러한 항목에 대해 수행할 작업이 insert라고 명시적으로 표시하지 않습니다. 삽입은 기본 작업이므로 명시적으로 지정하지 않아도 됩니다.

일괄 피드를 전송하고 결과를 수신하려면 Service.batch 메서드를 호출합니다.

Service.insert와 마찬가지로 Service.batch는 새로운 <atom:id> 값이 설정된 삽입된 항목을 반환합니다. 반환된 항목은 GoogleBaseFeed 객체에 포함됩니다.

다른 두 항목을 삽입하면서 세 번째 항목 (이미 가져와서 entry3에 저장한 항목)을 동시에 삭제하려면 다음 코드를 사용하면 됩니다.

GoogleBaseEntry toDelete = new GoogleBaseEntry();


toDelete.setId(entry3.getId());
BatchUtils.setBatchOperationType(toDelete, BatchOperationType.DELETE);

feed.addEntry(toDelete);


GoogleBaseFeed result = service.batch(batchUrl, feed);

여기서 servicecom.google.gdata.client.Service의 인스턴스입니다.

항목을 업데이트하려면 OperationType.UPDATE을 지정하고 항목을 거의 비워 두지 않고 원하는 변경사항으로 항목을 초기화합니다.

이 예에서는 Google Base 데이터 API를 사용합니다. service.batch를 다른 유형의 GData 서비스와 함께 사용하는 경우 GoogleBaseFeed, GoogleBaseEntry, GoogleBaseService 클래스를 적절한 피드, 항목, 서비스 클래스로 바꾸세요.

일괄 작업의 결과가 반드시 요청된 순서대로 반환되지는 않습니다. 위의 예에서 결과 피드에는 entry2entry1가 차례로 포함될 수 있습니다. 항목이 특정 순서로 반환된다고 가정해서는 안 됩니다.

작업 추적에 설명된 대로 일괄 작업 피드는 각 삽입 작업에 고유한 일괄 ID를 할당해야 합니다. 위의 예시에서 배치 ID는 AB입니다. 따라서 요청된 작업의 상태를 찾으려면 다음과 같이 반환된 배치 피드의 항목을 반복하고 배치 ID 또는 항목 ID를 비교해야 합니다.

for (GoogleBaseEntry entry : result.getEntries()) {
  String batchId = BatchUtils.getBatchId(entry);      
  if (BatchUtils.isSuccess(entry)) {     
    if ("A".equals(batchId)) {       
      entry1 = entry;     } 
    else if ("B".equals(batchId)) {       
      entry2 = entry;     } 
    else if (BatchUtils.getBatchOperationType(entry) 
      == BatchOperationType.DELETE) {       
      System.out.println("Entry " + entry.getId() +
      " has been deleted successfully.");     
    }      
  } else {     
    BatchStatus status = BatchUtils.getBatchStatus(entry);     
    System.err.println(batchId + " failed (" +                
      status.getReason() + ") " +  status.getContent());      
    }    
  } 

반환된 피드에서 찾을 수 있는 각 항목에는 연결된 BatchStatus 객체가 있습니다. BatchStatus 객체에는 HTTP 반환 코드와 항목이 처리되는 동안 발생한 문제를 설명하는 응답이 포함됩니다. 작업이 성공했는지 확인하려면 각 항목의 HTTP 반환 코드를 확인해야 합니다.

위 예에서는 편의 메서드 BatchUtils.isSuccess를 사용하여 확인합니다. 이 경우에는 BatchUtils.getBatchStatus(entry) < 300와 동일합니다.

상태 코드 및 응답은 상태 코드 처리에 자세히 설명되어 있습니다.

맨 위로