In diesem Dokument werden einige Techniken beschrieben, mit denen Sie die Leistung Ihrer Anwendung verbessern können. In einigen Fällen werden Beispiele aus anderen APIs oder generischen APIs verwendet, um die vorgestellten Ideen zu erläutern. Dieselben Konzepte gelten jedoch auch für die Android Over The Air API.
Komprimierung mit gzip
Durch Aktivierung der gzip-Komprimierung kann die für jede Anfrage benötigte Bandbreite einfach und bequem reduziert werden. Auch wenn die Dekomprimierung der Ergebnisse zusätzliche CPU-Zeit kostet, lohnt sie sich verglichen mit den Netzwerkkosten durchaus.
Sie müssen zwei Schritte ausführen, um eine mit gzip codierte Antwort zu erhalten: Legen Sie einen Header Accept-Encoding
fest und ändern Sie den User-Agent so, dass er den String gzip
enthält. Hier ein Beispiel für HTTP-Header im korrekten Format zur Aktivierung der gzip-Komprimierung:
Accept-Encoding: gzip User-Agent: my program (gzip)
Mit Teilressourcen arbeiten
Eine andere Möglichkeit zur Verbesserung der Leistung der API-Aufrufe besteht darin, nur den Teil der Daten zu senden und zu empfangen, der für Sie interessant ist. Dadurch lassen sich in der Anwendung die Übertragung, Analyse und Speicherung nicht benötigter Felder vermeiden und so Ressourcen wie Netzwerke, CPU und Speicher effizienter nutzen.
Es gibt zwei Arten von Teilanfragen:
- Teilantwort: Eine Anfrage, mit der Sie angeben, welche Felder in der Antwort enthalten sein sollen. Verwenden Sie dazu den Anfrageparameter
fields
. - Patch: Eine Aktualisierungsanfrage, bei der Sie nur die zu ändernden Felder senden. Verwenden Sie dazu das HTTP-Verb
PATCH
.
In den folgenden Abschnitten finden Sie weitere Informationen zu Teilanfragen.
Teilantwort
Standardmäßig wird vom Server nach der Verarbeitung einer Anfrage die komplette Darstellung einer Ressource zurückgeliefert. Sie können den Server zwecks Leistungsverbesserung aber auch anweisen, nur die Felder zu senden, die Sie wirklich benötigen, und erhalten dann eine Teilantwort.
Verwenden Sie zum Anfragen einer Teilantwort den Anfrageparameter fields
, um anzugeben, welche Felder zurückgegeben werden sollen. Sie können diesen Parameter mit jeder beliebigen Anfrage verwenden, die Antwortdaten zurückgibt.
Beachten Sie, dass sich der fields
-Parameter nur auf die Antwortdaten auswirkt. Er wirkt sich nicht auf die Daten aus, die Sie (gegebenenfalls) senden müssen. Verwenden Sie eine Patch-Anfrage, um die Datenmenge zu reduzieren, die bei der Änderung von Ressourcen gesendet wird.
Beispiel
Patch (Teilaktualisierung)
Sie können auch das Senden von unnötigen Daten vermeiden, wenn Sie Ressourcen ändern. Um nur aktualisierte Daten für die Felder zu senden, die Sie ändern, verwenden Sie das HTTP-Verb PATCH
. Die Patch-Semantik, die in diesem Dokument beschrieben wird, ist anders (und einfacher) als die der älteren GData-Implementierung einer Teilaktualisierung.
Das kurze Beispiel unten zeigt, wie mit einer Patch-Anfrage die Datenmenge minimiert wird, die Sie zur Durchführung eines kleinen Updates benötigen.
Beispiel
Umgang mit der Antwort auf ein Patch
Nachdem eine gültige Patch-Anfrage verarbeitet wurde, gibt die API einen HTTP-Antwortcode 200 OK
zusammen mit der vollständigen Darstellung der geänderten Ressource zurück. Wenn ETags von der API verwendet werden, aktualisiert der Server ETag-Werte, sobald eine Patch-Anfrage erfolgreich verarbeitet wird, wie bei PUT
.
Die Patch-Anfrage gibt die vollständige Ressourcendarstellung zurück, es sei denn, Sie verwenden den fields
-Parameter, um die zurückgegebene Datenmenge zu reduzieren.
Wenn eine Patch-Anfrage zu einem neuen Ressourcenstatus führt, der syntaktisch oder semantisch ungültig ist, gibt der Server einen HTTP-Statuscode 400 Bad Request
oder 422 Unprocessable Entity
zurück und der Ressourcenstatus bleibt unverändert. Beispiel: Wenn Sie versuchen, den Wert für ein Pflichtfeld zu löschen, gibt der Server einen Fehler zurück.
Alternative Schreibweise, wenn das PATCH-HTTP-Verb nicht unterstützt wird
Wenn Ihre Firewall keine HTTP-PATCH
-Anfragen unterstützt, führen Sie eine HTTP-POST
-Anfrage aus und setzen Sie den Override-Header auf PATCH
(wie unten dargestellt):
POST https://www.googleapis.com/... X-HTTP-Method-Override: PATCH ...
Unterschied zwischen Patch und Aktualisierung
Wenn Sie in der Praxis Daten für eine Aktualisierungsanfrage senden, die das HTTP-Verb PUT
verwendet, müssen Sie nur die Felder senden, die erforderlich oder optional sind. Wenn Sie Werte für Felder senden, die vom Server festgelegt werden, werden diese ignoriert. Obwohl dies wie eine andere Möglichkeit für eine Teilaktualisierung aussieht, hat dieser Ansatz einige Einschränkungen. Mit Aktualisierungen, die das HTTP-Verb PUT
verwenden, schlägt die Anfrage fehl, wenn Sie erforderliche Parameter nicht angeben. Vorher festgelegte Daten werden gelöscht, wenn Sie keine optionalen Parameter angeben.
Aus diesem Grund ist die Verwendung eines Patch wesentlich sicherer. Sie geben nur Daten für die Felder an, die Sie ändern möchten; Felder, die Sie weglassen, werden nicht gelöscht. Sich wiederholende Elemente oder Arrays sind die einzige Ausnahme zu dieser Regel. Wenn Sie diese alle weglassen, bleiben sie unverändert. Wenn Sie ein Element oder Array angeben, wird das ganze Set durch das Set ersetzt, das Sie angeben.