Questo documento illustra alcune tecniche che puoi utilizzare per migliorare le prestazioni della tua applicazione. In alcuni casi, vengono utilizzati esempi di altre API o API generiche per illustrare le idee presentate. Tuttavia, gli stessi concetti sono applicabili all'API Android Over The Air.
Compressione con gzip
Un modo semplice e pratico per ridurre la larghezza di banda necessaria per ogni richiesta è attivare la compressione gzip. Sebbene questa richieda tempo di CPU aggiuntivo per decomprimere i risultati, il vantaggio a livello di costi di rete di solito la rende molto utile.
Per ricevere una risposta con codifica gzip, devi eseguire due operazioni: 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 attivare la compressione gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)
Utilizzo di risorse parziali
Un altro modo per migliorare le prestazioni delle chiamate API è inviare e ricevere solo la parte di dati che ti interessa. In questo modo, l'applicazione evita di trasferire, analizzare e archiviare i campi non necessari, con una maggiore efficienza nell'utilizzo delle risorse, tra cui rete, CPU e memoria.
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 invii solo i campi che vuoi modificare (utilizza il verbo HTTP
PATCH).
Maggiori dettagli su come inviare richieste parziali sono disponibili nelle sezioni seguenti.
Risposta parziale
Per impostazione predefinita, il server restituisce la rappresentazione completa di una risorsa dopo aver elaborato le richieste. Per migliorare le prestazioni, puoi chiedere al server di inviare solo i campi di cui hai effettivamente bisogno e ricevere quindi una risposta parziale.
Per richiedere una risposta parziale, utilizza il parametro di richiesta fields per specificare i campi che vuoi che vengano restituiti. Puoi utilizzare questo parametro con qualsiasi richiesta che restituisce dati di risposta.
Tieni presente che il parametro fields influisce solo sui dati di risposta e non sui dati che devi inviare, se presenti. Per ridurre la quantità di dati inviati durante la modifica delle risorse, utilizza una richiesta PATCH.
Patch (aggiornamento parziale)
Puoi anche evitare di inviare dati non necessari quando modifichi le risorse. Per inviare i dati aggiornati solo per i campi specifici che stai modificando, utilizza il verbo HTTP PATCH. Le semantiche di PATCH descritte in questo documento sono diverse (e più semplici) rispetto all'implementazione GData precedente dell'aggiornamento parziale.
Il breve esempio riportato di seguito mostra come l'utilizzo di PATCH riduce al minimo i dati da inviare per eseguire un piccolo aggiornamento.
Esempio
Gestione della risposta a una richiesta PATCH
Dopo aver elaborato una richiesta 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 correttamente una richiesta PATCH, come avviene con PUT.
La richiesta 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 PATCH genera un nuovo stato della risorsa non valido dal punto di vista sintattico o semantico, 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 provi a 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, invia una richiesta HTTP POST 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. Anche se potrebbe 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 vengono cancellati i dati impostati in precedenza se non fornisci i parametri facoltativi.
Per questo motivo, è molto più sicuro utilizzare PATCH. Fornisci i dati solo per i campi che vuoi modificare; i campi omessi non vengono cancellati. L'unica eccezione a questa regola si verifica con elementi o array ripetuti: se li ometti tutti, rimangono invariati; se ne fornisci uno, l'intero insieme viene sostituito con quello che fornisci.