W tym dokumencie opisujemy techniki, które możesz wykorzystać do poprawy działania swojej aplikacji. Aby przedstawić niektóre rozwiązania, użyliśmy przykładów z innych interfejsów API lub ogólnych interfejsów API. Jednak te same pojęcia dotyczą interfejsu Google Photos Library API.
Kompresja za pomocą gzip
Kompresja gzip pozwala łatwo i wygodnie zmniejszyć przepustowość potrzebną do obsługi żądań. Chociaż dekompresja wyników wymaga dodatkowego czasu pracy procesora, zrekompensowanie tego z kosztami sieci zazwyczaj jest bardzo opłacalne.
Aby odebrać odpowiedź zakodowaną w formacie gzip, ustaw nagłówek Accept-Encoding i zmodyfikuj klienta użytkownika tak, aby zawierał ciąg gzip. Oto przykład prawidłowo sformatowanych nagłówków HTTP, które umożliwiają włączenie kompresji gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)
Praca z częściowymi zasobami
Innym sposobem na poprawę skuteczności wywołań interfejsu API jest wysyłanie żądań tylko do części danych, która Cię interesuje. Pozwala to aplikacji uniknąć przesyłania, analizowania i przechowywania niepotrzebnych pól, dzięki czemu może wydajniej wykorzystywać zasoby, w tym sieć, procesor i pamięć.
Odpowiedź częściowa
Po przetworzeniu żądań serwer domyślnie odsyła pełną reprezentację zasobu. Aby uzyskać lepszą wydajność, możesz poprosić serwer, aby wysłał tylko te pola, których potrzebujesz, i uzyskał odpowiedź częściową.
Aby wysłać takie żądanie, użyj parametru żądania fields i określ pola, które chcesz otrzymać. Tego parametru możesz używać w każdym żądaniu, które zwraca dane odpowiedzi.
Przykład
Przykład poniżej pokazuje sposób użycia parametru fields z ogólną (fikcyjną) wartością „Demo” API.
Proste żądanie: to żądanie HTTP GET pomija parametr fields i zwraca pełny zasób.
https://www.googleapis.com/demo/v1
Odpowiedź z pełnym zasobem: pełne dane zasobu obejmują poniższe pola i wiele innych pól pominiętych ze względu na zwięzłość.
{
  "kind": "demo",
  ...
  "items": [
  {
    "title": "First title",
    "comment": "First comment.",
    "characteristics": {
      "length": "short",
      "accuracy": "high",
      "followers": ["Jo", "Will"],
    },
    "status": "active",
    ...
  },
  {
    "title": "Second title",
    "comment": "Second comment.",
    "characteristics": {
      "length": "long",
      "accuracy": "medium"
      "followers": [ ],
    },
    "status": "pending",
    ...
  },
  ...
  ]
}Żądanie odpowiedzi częściowej: poniższe żądanie tego samego zasobu używa parametru fields, aby znacznie zmniejszyć ilość zwracanych danych.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
Odpowiedź częściowa: w odpowiedzi na powyższe żądanie serwer wysyła odpowiedź zawierającą tylko informacje o rodzaju oraz skróconą tablicę elementów, w której każdy element zawiera tylko informacje o tytule HTML i długości danego elementu.
200 OK
{
  "kind": "demo",
  "items": [{
    "title": "First title",
    "characteristics": {
      "length": "short"
    }
  }, {
    "title": "Second title",
    "characteristics": {
      "length": "long"
    }
  },
  ...
  ]
}Pamiętaj, że odpowiedź jest obiektem JSON, który zawiera tylko wybrane pola i ich obiekty nadrzędne.
Szczegółowe informacje o formatowaniu parametru fields znajdziesz poniżej. Opisaliśmy też szczegółowo zawartość odpowiedzi.
Podsumowanie składni parametru pól
Format wartości parametru żądania fields jest oparty na składni XPath. Podsumowanie obsługiwanej składni znajdziesz w dalszej części tego artykułu.
- Użyj listy rozdzielanej przecinkami, aby wybrać wiele pól.
- Użyj a/b, aby wybrać polebzagnieżdżone w polua; użyja/b/c, aby wybrać poleczagnieżdżone wb.
 Wyjątek: w przypadku odpowiedzi interfejsu API zawierających słowo „dane” otoki, w których odpowiedź jest zagnieżdżona w obiekcie data, który wygląda jakdata: { ... }, nie dodawaj „data”. w specyfikacjifields. Dodanie obiektu danych do specyfikacji pól, takich jakdata/a/b, powoduje błąd. Użyj tylko specyfikacjifields, takiej jaka/b.
- Użyj selektora podrzędnego, aby zażądać zbioru konkretnych podrzędnych pól tablic lub obiektów. W tym celu umieść wyrażenia w nawiasach „( )”.Przykład: fields=items(id,author/email)zwraca tylko identyfikator elementu i adres e-mail autora każdego elementu tablicy. Możesz też podać jedno pole podrzędne, gdziefields=items(id)jest równoważne zfields=items/id.
- W razie potrzeby w wybranych polach używaj symboli wieloznacznych.
      Przykład: fields=items/pagemap/*wybiera wszystkie obiekty w elemencie pagemap.
Więcej przykładów użycia parametru pól
W przykładach poniżej opisano, jak wartość parametru fields wpływa na odpowiedź.
Uwaga: tak jak każda wartość parametru zapytania, wartość parametru fields musi być zakodowana na potrzeby adresu URL. Aby ułatwić czytanie, w przykładach w tym dokumencie pominięto kodowanie.
- Określ pola, które chcesz zwrócić, lub wybierz odpowiednie pola.
- Wartość parametru żądania fieldsma postać listy pól rozdzielanej przecinkami. Każde pole jest określane względem elementu głównego odpowiedzi. Oznacza to, że jeśli wykonujesz operację na liście, w odpowiedzi otrzymasz kolekcję, która zwykle zawiera tablicę zasobów. Jeśli wykonujesz operację, która zwraca 1 zasób, pola są określane względem tego zasobu. Jeśli wybrane pole jest tablicą (lub jest jej częścią), serwer zwraca wybraną część wszystkich elementów tablicy.
 
 Oto kilka przykładów na poziomie kolekcji:
 Przykłady Efekt itemsZwraca wszystkie elementy tablicy, w tym wszystkie pola w każdym elemencie (nie zwraca żadnych innych pól). etag,itemsZwraca zarówno pole etag, jak i wszystkie elementy tablicy.items/titleZwraca tylko pole titlekażdego elementu tablicy.
 
 Gdy jest zwracane zagnieżdżone pole, odpowiedź zawiera obiekty nadrzędne. Pola nadrzędne nie zawierają żadnych innych pól podrzędnych, chyba że zostaną też wybrane bezpośrednio.context/facets/labelZwraca tylko pole labelkażdego elementu tablicyfacets, która jest zagnieżdżona w obiekciecontext.items/pagemap/*/titleZwraca tylko pole title(jeśli jest obecne) każdego elementu tablicy we wszystkich obiektach podrzędnych obiektupagemap.
 Oto kilka przykładów na poziomie zasobu:
 Przykłady Efekt titleZwraca pole titleżądanego zasobu.author/uriZwraca pole podrzędne uriobiektuauthorw żądanym zasobie.links/*/hrefZwraca pole hrefwszystkich obiektów podrzędnych obiektulinks.
- Aby żądać tylko fragmentów pól, dokonaj wyborów podrzędnych.
- Jeśli żądanie dotyczy określonych pól, serwer zwraca domyślnie całe obiekty lub elementy tablicy. Możesz użyć odpowiedzi, która zawiera tylko niektóre pola podrzędne. W tym celu użyj polecenia „( )” jak w poniższym przykładzie.Przykład Efekt items(title,author/uri)Zwraca tylko wartości titleiuriautora z każdego elementu tablicy.
Obsługa odpowiedzi częściowych
Gdy serwer przetworzy prawidłowe żądanie z parametrem zapytania fields, razem z żądanymi danymi wyśle kod stanu HTTP 200 OK. Jeśli parametr zapytania fields zawiera błąd lub jest nieprawidłowy z innego powodu, serwer zwraca kod stanu HTTP 400 Bad Request i komunikat o błędzie z informacją o błędzie z wybranymi polami (na przykład "Invalid field selection a/b").
Oto przykładowa odpowiedź częściowa, o której mowa powyżej, we wprowadzeniu. Aby określić, które pola zwrócić, żądanie używa parametru fields.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
Odpowiedź częściowa wygląda tak:
200 OK
{
  "kind": "demo",
  "items": [{
    "title": "First title",
    "characteristics": {
      "length": "short"
    }
  }, {
    "title": "Second title",
    "characteristics": {
      "length": "long"
    }
  },
  ...
  ]
}Uwaga: w interfejsach API, które obsługują parametry zapytania do podziału danych na strony (na przykład maxResults i nextPageToken), te parametry pozwalają zmniejszyć liczbę wyników zapytań do rozmiaru, który ułatwia obsługę. W przeciwnym razie wzrost wydajności wynikający z odpowiedzi częściowej może nie zostać osiągnięty.
