Inviare richieste batch

Un approccio specifico al raggruppamento, l'endpoint batch HTTP globale (www.googleapis.com/batch), è stato disattivato il 12 agosto 2020, come annunciato nel blog Google Developers. Altri approcci al raggruppamento continuano a funzionare, come documentato nel resto di questa pagina. Se il tuo codice utilizza l'endpoint batch HTTP globale, leggi il post del blog per le istruzioni sulla transizione per utilizzare altri approcci, ad esempio gli endpoint batch HTTP specifici dell'API (www.googleapis.com/batch/API/VERSION).

Questo documento mostra come raggruppare insieme le chiamate API per ridurre il numero di connessioni HTTP che il client deve effettuare.

Questo documento riguarda nello specifico la richiesta in batch mediante l'invio di una richiesta HTTP. Se, invece, utilizzi una libreria client Google per effettuare una richiesta in batch, consulta la documentazione sulla libreria client.

Panoramica

Ogni connessione HTTP eseguita dal tuo client genera un certo sovraccarico. L'API Google Ad Experience Report supporta il raggruppamento per consentire al tuo client di effettuare più chiamate API in una singola richiesta HTTP.

Esempi di situazioni in cui potrebbe essere utile utilizzare la funzione di raggruppamento:

  • Hai appena iniziato a utilizzare l'API e devi caricare molti dati.
  • Un utente ha apportato modifiche ai dati mentre l'applicazione era offline (disconnessa da Internet), pertanto l'applicazione deve sincronizzare i dati locali con il server inviando molti aggiornamenti ed eliminazioni.

In ogni caso, invece di inviare ogni chiamata separatamente, puoi raggrupparli in una singola richiesta HTTP. Tutte le richieste interne devono essere inviate alla stessa API Google.

Puoi limitare a 1000 chiamate in una singola richiesta in batch. Se è necessario effettuare più chiamate di questo tipo, utilizza più richieste in batch.

Nota: il sistema batch per l'API Google Ad Experience Report utilizza la stessa sintassi del sistema di elaborazione batch OData, ma la semantica è diversa.

Dettagli batch

Una richiesta in batch è composta da più chiamate API combinate in una singola richiesta HTTP, che può essere inviata al batchPath specificato nel documento di rilevamento dell'API. Il percorso predefinito è /batch/api_name/api_version. Questa sezione descrive la sintassi batch in dettaglio; successivamente, è presente un esempio.

Nota: un insieme di n richieste raggruppate insieme viene conteggiato ai fini del limite di utilizzo come richieste n, non come una singola richiesta. La richiesta in batch viene separata in un gruppo di richieste prima dell'elaborazione.

Formato di una richiesta in batch

Una richiesta in batch è una singola richiesta HTTP standard contenente più chiamate API del report Esperienza pubblicitaria Google, che utilizza il tipo di contenuti multipart/mixed. All'interno della richiesta HTTP principale, ciascuna delle parti contiene una richiesta HTTP nidificata.

Ogni parte inizia con la propria intestazione HTTP Content-Type: application/http. Può anche avere un'intestazione Content-ID facoltativa. Tuttavia, le intestazioni delle parti servono solo a segnare l'inizio della parte; sono separate dalla richiesta nidificata. Dopo che il server ha annullato il wrapping della richiesta in batch in richieste separate, le intestazioni delle parti vengono ignorate.

Il corpo di ogni parte è una richiesta HTTP completa, con verbo, URL, intestazioni e corpo. La richiesta HTTP deve contenere solo la parte del percorso dell'URL; gli URL completi non sono consentiti nelle richieste in batch.

Le intestazioni HTTP della richiesta batch esterna, ad eccezione delle intestazioni Content-, come Content-Type, si applicano a ogni richiesta nel gruppo. Se specifichi una determinata intestazione HTTP sia nella richiesta esterna sia in una singola chiamata, il valore dell'intestazione della singola chiamata sostituisce il valore dell'intestazione della richiesta batch esterna. Le intestazioni di una singola chiamata si applicano solo a quella chiamata.

Ad esempio, se fornisci un'intestazione per una chiamata specifica, l'intestazione verrà applicata solo a quella chiamata. Se fornisci un'intestazione di autorizzazione per la richiesta esterna, questa verrà applicata a tutte le singole chiamate, a meno che non la sostituiscano con le proprie intestazioni di autorizzazione.

Quando il server riceve la richiesta in batch, applica i parametri di query e le intestazioni esterne della richiesta (a seconda dei casi) a ogni parte e poi tratta ogni parte come se fosse una richiesta HTTP separata.

Risposta a una richiesta in batch

La risposta del server è una singola risposta HTTP standard con un tipo di contenuti multipart/mixed; ogni parte è la risposta a una delle richieste nella richiesta in batch, nello stesso ordine delle richieste.

Come le parti della richiesta, ogni parte di risposta contiene una risposta HTTP completa, inclusi un codice di stato, intestazioni e corpo. Come per le parti nella richiesta, ogni parte di risposta è preceduta da un'intestazione Content-Type che segna l'inizio della parte.

Se una determinata parte della richiesta aveva un'intestazione Content-ID, la parte corrispondente della risposta ha un'intestazione Content-ID corrispondente, con il valore originale preceduto dalla stringa response-, come mostrato nell'esempio riportato di seguito.

Nota: il server potrebbe eseguire le tue chiamate in qualsiasi ordine. Non conteggiare l'esecuzione di questi elementi nell'ordine in cui li hai specificati. Se vuoi assicurarti che vengano effettuate due chiamate in un determinato ordine, non puoi inviarle in una singola richiesta, ma devi solo inviare la prima, quindi attendere la risposta alla prima prima di inviare la seconda.

Esempio

L'esempio seguente mostra l'utilizzo del raggruppamento con l'API Google Ad Experience Report.

Esempio di richiesta in batch


  POST /batch/v1?key=key HTTP/1.1
  Content-Type: multipart/mixed; boundary=batch_aer

  --batch_aer
  Content-Type: application/http
  Content-ID: id1

  GET /v1/sites/http%3A%2F%2F/site1%2F HTTP/1.1

  --batch_aer
  Content-Type: application/http
  Content-ID: id2

  GET /v1/sites/http%3A%2F%2F/site2%2F HTTP/1.1

  --batch_aer--
  

Esempio di risposta in batch

Questa è la risposta alla richiesta di esempio nella sezione precedente.


  HTTP/1.1 200 OK
  Content-Type: multipart/mixed; boundary=batch_aer

  --batch_aer
  Content-Type: application/http
  Content-ID: response-id1

  HTTP/1.1 200 OK
  Content-Type: application/json

  {
    "reviewedSite": "site1",
    "mobileSummary": {
      "lastChangeTime": "2019-02-05T09:46:26.521747Z",
      "betterAdsStatus": "PASSING",
      "reportUrl": "https://www.google.com/webmasters/tools/ad-experience-mobile?siteUrl=http://site1/",
      "filterStatus": "OFF"
    },
    "desktopSummary": {
      "lastChangeTime": "2019-02-07T23:07:29.017206Z",
      "betterAdsStatus": "FAILING",
      "enforcementTime": "2018-02-15T15:00:00Z",
      "reportUrl": "https://www.google.com/webmasters/tools/ad-experience-desktop?siteUrl=http://site1/",
      "filterStatus": "ON"
    }
  }

  --batch_aer
  Content-Type: application/http
  Content-ID: response-id2

  HTTP/1.1 200 OK
  Content-Type: application/json

  {
    "reviewedSite": "site2",
    "mobileSummary": {
      "lastChangeTime": "2018-03-06T16:06:33.375851Z",
      "betterAdsStatus": "PASSING",
      "reportUrl": "https://www.google.com/webmasters/tools/ad-experience-mobile?siteUrl=http://site2/",
      "filterStatus": "OFF"
    },
    "desktopSummary": {
      "lastChangeTime": "2018-03-06T16:06:33.375851Z",
      "betterAdsStatus": "PASSING",
      "reportUrl": "https://www.google.com/webmasters/tools/ad-experience-desktop?siteUrl=http://site2/",
      "filterStatus": "OFF"
    }
  }

  --batch_aer--