일괄 요청 전송

애플리케이션에서 HTTP를 연결할 때마다 일정량의 오버헤드가 발생합니다. 이 라이브러리는 애플리케이션이 단일 HTTP 요청에 여러 API 호출을 넣을 수 있도록 일괄 처리를 지원합니다. 다음과 같은 경우에 일괄 처리를 사용할 수 있습니다.

  • 수행해야 할 소규모 요청이 많고 HTTP 요청 오버헤드를 최소화하려고 합니다.
  • 애플리케이션이 오프라인 상태일 때 사용자가 데이터를 변경했으므로 애플리케이션에서 여러 업데이트 및 삭제를 전송하여 로컬 데이터를 서버와 동기화해야 합니다.

참고: 일괄 요청 1회당 호출 수는 1,000회로 제한됩니다. 이보다 더 많이 호출해야 하는 경우 일괄 요청을 여러 개 사용하세요.

참고: 미디어 업로드 객체는 일괄 요청에 사용할 수 없습니다.

세부정보

BatchRequest 객체를 인스턴스화한 후 실행하려는 각 요청에 대해 Queue 메서드를 호출하여 일괄 요청을 만듭니다. 각 요청에서 애플리케이션이 해당 요청에 대한 응답을 수신하면 호출될 콜백을 전달합니다. 콜백 함수의 인수는 다음과 같습니다.

콘텐츠
콘텐츠 응답 또는 요청이 실패한 경우 null입니다.
error
오류 또는 요청이 성공한 경우 null입니다.
index
개별 요청의 색인입니다.
메시지
모든 헤더와 콘텐츠가 포함된 전체 HTTP 메시지입니다.
요청을 추가한 후에는 ExecuteAsync 메서드를 호출하여 요청합니다.

다음 코드 스니펫에서는 두 개의 API 요청이 단일 HTTP 요청으로 일괄 처리되고 각 API 요청에 콜백이 제공됩니다.

UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { CalendarService.Scope.Calendar },
        "user", CancellationToken.None, new FileDataStore("Calendar.Sample.Store"));
}

// Create the service.
var service = new CalendarService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "Google Calendar API Sample",
    });

// Create a batch request.
var request = new BatchRequest(service);
request.Queue<CalendarList>(service.CalendarList.List(),
     (content, error, i, message) =>
     {
         // Put your callback code here.
     });
request.Queue<Event>(service.Events.Insert(
     new Event
     {
         Summary = "Learn how to execute a batch request",
         Start = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 10, 0, 0) },
         End = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 12, 0, 0) }
     }, "YOUR_CALENDAR_ID_HERE"),
     (content, error, i, message) =>
     {
         // Put your callback code here.
     });
// You can add more Queue calls here.

// Execute the batch request, which includes the 2 requests above.
await request.ExecuteAsync();