Ottimizzare le prestazioni

Questo documento descrive alcune tecniche che puoi utilizzare per migliorare le prestazioni della tua applicazione. In alcuni casi, vengono utilizzati esempi tratti da altre API o API generiche per illustrare le idee presentate. Tuttavia, gli stessi concetti valgono per l'API Over The Air di Android.

Compressione mediante gzip

Un modo semplice e pratico per ridurre la larghezza di banda necessaria per ogni richiesta consiste nell'attivare la compressione gzip. Sebbene ciò richieda più tempo di CPU per decomprimere i risultati, il compromesso con i costi di rete di solito lo rende molto utile.

Per ricevere una risposta con codifica gzip devi fare due cose: impostare un'intestazione Accept-Encoding e modificare il tuo user agent in modo che contenga la stringa gzip. Ecco un esempio di intestazioni HTTP formattate correttamente per abilitare la compressione gzip:

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

Lavorare con risorse parziali

Un altro modo per migliorare le prestazioni delle chiamate API consiste nell'inviare e ricevere solo la parte dei dati che ti interessa. Ciò consente all'applicazione di evitare il trasferimento, l'analisi e l'archiviazione dei campi non necessari, in modo da poter utilizzare risorse come rete, CPU e memoria in modo più efficiente.

Esistono due tipi di richieste parziali:

  • Risposta parziale: una richiesta in cui specifichi i campi da includere nella risposta (utilizza il parametro di richiesta fields).
  • Patch: una richiesta di aggiornamento in cui vengono inviati solo i campi da modificare (utilizza il verbo HTTP PATCH).

Nelle sezioni che seguono vengono forniti ulteriori dettagli su come inviare richieste parziali.

Risposta parziale

Per impostazione predefinita, il server restituisce la rappresentazione completa di una risorsa dopo l'elaborazione delle richieste. Per migliorare le prestazioni, puoi chiedere al server di inviare solo i campi effettivamente necessari e ottenere invece una risposta parziale.

Per richiedere una risposta parziale, utilizza il parametro di richiesta fields per specificare i campi da restituire. Puoi utilizzare questo parametro con qualsiasi richiesta che restituisce dati di risposta.

Tieni presente che il parametro fields influisce solo sui dati della risposta e non sugli eventuali dati che devi inviare. Per ridurre la quantità di dati inviati durante la modifica delle risorse, utilizza una richiesta patch.

Esempio

Patch (aggiornamento parziale)

Inoltre, puoi evitare di inviare dati non necessari quando modifichi le risorse. Per inviare dati aggiornati solo per i campi specifici che stai modificando, utilizza il verbo HTTP PATCH. La semantica delle patch descritta in questo documento è diversa (e più semplice) rispetto alla precedente implementazione GData dell'aggiornamento parziale.

Il breve esempio riportato di seguito mostra come l'utilizzo della patch riduce al minimo i dati da inviare per effettuare un piccolo aggiornamento.

Esempio

Gestione della risposta a una patch

Dopo aver elaborato una richiesta di patch valida, l'API restituisce un codice di risposta HTTP 200 OK insieme alla rappresentazione completa della risorsa modificata. Se l'API utilizza gli ETag, il server aggiorna i valori ETag quando elabora una richiesta di patch, proprio come avviene con PUT.

La richiesta di patch restituisce l'intera rappresentazione della risorsa, a meno che non utilizzi il parametro fields per ridurre la quantità di dati restituiti.

Se una richiesta di patch dà come risultato un nuovo stato della risorsa non valido sintatticamente o semanticamente, il server restituisce un codice di stato HTTP 400 Bad Request o 422 Unprocessable Entity e lo stato della risorsa rimane invariato. Ad esempio, se tenti di eliminare il valore di un campo obbligatorio, il server restituisce un errore.

Notazione alternativa quando il verbo HTTP PATCH non è supportato

Se il firewall non consente le richieste HTTP PATCH, esegui una richiesta POST HTTP e imposta l'intestazione di override su PATCH, come mostrato di seguito:

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

Differenza tra patch e aggiornamento

In pratica, quando invii i dati per una richiesta di aggiornamento che utilizza il verbo HTTP PUT, devi inviare solo i campi obbligatori o facoltativi; se invii valori per i campi impostati dal server, questi vengono ignorati. Sebbene questo approccio possa sembrare un altro modo per eseguire un aggiornamento parziale, questo approccio presenta alcune limitazioni. Con gli aggiornamenti che utilizzano il verbo HTTP PUT, la richiesta non va a buon fine se non fornisci i parametri obbligatori e cancella i dati impostati in precedenza se non fornisci parametri facoltativi.

Per questo motivo è molto più sicuro usare la patch. I dati vengono forniti solo per i campi da modificare; i campi omessi non vengono cancellati. L'unica eccezione a questa regola si verifica con gli elementi o gli array ripetuti: se li ometti tutti, rimangono invariati; se fornisci uno di questi elementi, l'intero insieme viene sostituito con quello fornito da te.