Здесь описано, как можно повысить эффективность вашего приложения. В некоторых случаях используются примеры из общих и других API, однако те же принципы применимы и к Google Analytics API.
Использование GZIP
Сжатие GZIP позволяет легко сократить требования к пропускной способности при выполнении запросов. Извлечение результатов из архива оказывает дополнительную нагрузку на процессор, однако экономия сетевых ресурсов того стоит.
Чтобы получить ответ в архиве GZIP, необходимо, во-первых, задать заголовок Accept-Encoding
, а во-вторых – добавить в агент пользователя строку gzip
. Вот пример правильного оформления заголовков HTTP, которое обеспечивает сжатие GZIP:
Accept-Encoding: gzip User-Agent: my program (gzip)
Работа с частичными ресурсами
Ещё один способ повысить эффективность вызовов API – запрашивать только интересующую вас часть данных. Приложение не будет передавать, анализировать и сохранять ненужные поля, что позволит максимально эффективно использовать все имеющиеся ресурсы, включая сеть, процессор и память.
Частичный ответ
По умолчанию сервер, обработав запросы, возвращает полное представление ресурса. Чтобы повысить быстродействие, можно запрашивать только действительно необходимые поля и получать частичный ответ.
Чтобы запросить частичный ответ, укажите необходимые поля с помощью параметра запроса fields
. Этот параметр действует во всех запросах, возвращающих данные.
Пример
Следующий пример иллюстрирует использование параметра fields
в несуществующем демонстрационном API.
Простой запрос. В этом HTTP-запросе GET
не используется параметр fields
, и это значит, что по нему возвращается весь ресурс.
https://www.googleapis.com/demo/v1?key=YOUR-API-KEY
Ответ со всем ресурсом. Полные данные по ресурсу включают не только следующие поля, но и многие другие, которые мы опускаем для краткости.
{ "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", ... }, ... ] }
Запрос частичного ответа. В этом запросе для того же ресурса используется параметр fields
, что позволяет существенно сократить объем возвращаемых данных.
https://www.googleapis.com/demo/v1?key=YOUR-API-KEY&fields=kind,items(title,characteristics/length)
Частичный ответ. В ответ на указанный выше запрос сервер отправляет только информацию о поле kind и массив парных данных items, включающих только заголовки HTML и сведения о длине.
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
Обратите внимание на то, что ответ представляет собой объект JSON, включающий только выбранные поля и их родительские объекты.
Далее рассказывается о форматировании параметра fields
, а также более подробно рассматривается содержание ответа.
Краткая информация о синтаксисе параметра fields
Формат значения параметра запроса fields
основан на синтаксисе XPath. Его основные принципы перечислены ниже. Его основные принципы перечислены ниже. В следующем разделе также представлены дополнительные примеры.
- Чтобы выбрать несколько полей, перечислите их через запятую.
- Используйте
a/b
для выбора поляb
, расположенного внутри поляa
; используйтеa/b/c
для выбора поляc
, расположенного внутри поляb
.
Исключение. Для ответов API, в которых используются оболочки data (то есть ответ находится внутри объекта
data
видаdata: { ... }
), не включайте объектdata
в спецификациюfields
(например,data/a/b
) – это приведет к ошибке. Вместо этого используйте спецификациюfields
видаa/b
. - Используйте подселектор, чтобы запросить набор определенных подполей массивов или объектов. Для этого поместите выражения в скобки:
"( )"
.Пример:
fields=items(id,author/email)
возвращает только адреса электронной почты авторов и идентификаторы всех элементов в массиве. Вы также можете указать одно подполе, гдеfields=items(id)
эквивалентноfields=items/id
. - При выборе полей можно использовать подстановочные знаки.
Пример:
fields=items/pagemap/*
выбирает все объекты в карте страницы.
Другие примеры использования параметра fields
Из следующих примеров видно, как значение параметра fields
влияет на ответ.
Примечание. Как и все остальные значения параметров запроса, значение fields
должно быть закодировано. В целях наглядности в приведенных здесь примерах кодировка не используется.
- Определите, какие поля вы хотите получить, либо выберите их.
- Значение параметра
fields
представляет собой список разделенных запятыми полей, каждое их которых определено относительно корневой части запроса. Таким образом, при выполнении операции list ответ будет представлять собой коллекцию, обычно включающую в себя массив ресурсов. Если вы выполняете операцию, возвращающую один ресурс, поля необходимо определить относительно него. Если выбранное поле представляет собой массив или входит в него, сервер возвращает выбранную часть всех элементов массива.
Несколько примеров на уровне коллекций:
Примеры Результат items
Возвращает все элементы из массива items, в том числе все поля для каждого элемента, но не другие поля. etag,items
Возвращает поле etag
и все элементы массива items.items/title
Возвращает только поле title
для всех элементов массива.
При возвращении вложенного поля в ответ включаются также его родительские объекты. Если для родительского объекта явным образом не выбраны другие дочерние поля, они не возвращаются.context/facets/label
Возвращает только поле label
для всех элементов массиваfacets
, вложенного в объектcontext
.items/pagemap/*/title
Для всех элементов массива items возвращает только поле title
дочерних объектовpagemap
(при его наличии).
Несколько примеров на уровне ресурсов:
Примеры Результат title
Возвращает поле title
запрошенного ресурса.author/uri
Возвращает подполе uri
объектаauthor
для запрошенного ресурса.links/*/href
Возвращает поле href
всех дочерних объектовlinks
. - Чтобы запрашивать только части определенных полей, используйте подселекторы.
- По умолчанию, если в запросе указаны определенные поля, сервер возвращает все соответствующие объекты или элементы массива. Вы можете выбрать ответ, включающий только определенные подполя. Для этого используйте подселектор
( )
:Пример Результат items(title,author/uri)
Возвращает только значения title
иuri
автора для всех элементов массива items.
Работа с частичными ответами
После обработки действительного запроса, включающего параметр fields
, сервер возвращает код статуса HTTP 200 OK
вместе с требуемыми данными. Если в параметре запроса fields
есть ошибка или он не действителен, сервер возвращает код статуса HTTP 400 Bad Request
, а также сообщение об ошибке, гласящее, что пользователь неправильно выбрал поля (например, Invalid field selection a/b
).
Вот пример частичного ответа, показанного во вводном разделе выше. Для выбора нужных полей в запросе используется параметр fields
.
https://www.googleapis.com/demo/v1?key=YOUR-API-KEY&fields=kind,items(title,characteristics/length)
Частичный ответ выглядит так:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
Примечание. В API, которые поддерживают параметры запроса для разбиения данных на страницы (например, maxResults
и nextPageToken
), можно использовать такие параметры для сокращения числа результатов по каждому запросу. В противном случае основные преимущества частичных ответов теряют свою актуальность.