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 mediante gzip
Un modo semplice e pratico per ridurre la larghezza di banda necessaria per ogni richiesta è attivare la compressione gzip. Sebbene questo richieda tempo CPU aggiuntivo per decomprimere i risultati, il trade-off con i costi di rete di solito lo rende molto utile.
Per ricevere una risposta con codifica gzip devi eseguire due operazioni: impostare un'intestazione Accept-Encoding
e modificare lo 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 dei dati di tuo interesse. In questo modo, l'applicazione evita di trasferire, analizzare e memorizzare campi non necessari, in modo da poter utilizzare in modo più efficiente le risorse, tra cui rete, CPU e memoria.
Esistono due tipi di richieste parziali:
- Risposta parziale: una richiesta in cui specifichi quali campi 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
).
Ulteriori dettagli su come effettuare richieste parziali sono disponibili nelle sezioni seguenti.
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 di cui hai realmente bisogno e ricevere 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 quando modifichi le risorse, utilizza una richiesta patch.
Esempio
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
. La semantica delle patch descritta in questo documento è diversa (e più semplice) rispetto a quella dell'implementazione precedente di GData dell'aggiornamento parziale.
Il breve esempio riportato di seguito mostra come l'uso della patch riduce al minimo i dati che devi inviare per fare un piccolo aggiornamento.
Esempio
Gestione della risposta a un 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 gli ETag vengono utilizzati dall'API, il server aggiorna i valori ETag quando elabora correttamente una richiesta di applicazione patch, così 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 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 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
, effettua 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. Sebbene possa sembrare un altro modo per eseguire un aggiornamento parziale, questo approccio presenta alcune limitazioni. Con gli aggiornamenti che utilizzano il verbo PUT
HTTP, la richiesta non riesce se non fornisci parametri obbligatori e cancella i dati impostati in precedenza se non fornisci parametri facoltativi.
Per questo motivo, è molto più sicuro utilizzare la 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 gli elementi o gli array ripetuti: se li ometti tutti, rimangono invariati. se ne fornisci uno, l'intero set viene sostituito con quello da te fornito.