Советы по оптимизации

Здесь описаны способы повышения эффективности вашего приложения. В некоторых случаях используются примеры из общих и других API, однако те же приемы можно использовать в API хостов AdSense.

Содержание

  1. Использование GZIP
  2. Работа с частичными ресурсами
    1. Частичный ответ

Использование 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 в спецификацию параметра 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 для всех элементов массива items.

При возвращении вложенного поля в ответ включаются также его родительские объекты. Если для родительского объекта явным образом не выбраны другие дочерние поля, они не возвращаются.
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), можно использовать их для сокращения числа результатов по каждому запросу. В противном случае основные преимущества частичных ответов теряют свою актуальность.

Оставить отзыв о...

Текущей странице
AdSense Host API
AdSense Host API