В этом документе описаны некоторые методы, которые можно использовать для повышения производительности вашего приложения. В некоторых случаях для иллюстрации представленных идей используются примеры других API или универсальных API. Однако те же концепции применимы и к Android Over The Air API.
Сжатие с помощью gzip
Простой и удобный способ уменьшить пропускную способность, необходимую для каждого запроса, — включить сжатие gzip. Хотя для распаковки результатов требуется дополнительное время процессора, компромисс с сетевыми затратами обычно делает это весьма выгодным.
Чтобы получить ответ в кодировке gzip, вы должны сделать две вещи: установить заголовок Accept-Encoding
и изменить свой пользовательский агент, чтобы он содержал строку gzip
. Вот пример правильно сформированных HTTP-заголовков для включения сжатия gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)
Работа с частичными ресурсами
Еще один способ повысить производительность вызовов API — отправлять и получать только ту часть данных, которая вас интересует. Это позволяет вашему приложению избежать передачи, анализа и хранения ненужных полей, поэтому оно может использовать ресурсы, включая сеть, Процессор и память более эффективны.
Существует два типа частичных запросов:
- Частичный ответ : запрос, в котором вы указываете, какие поля включить в ответ (используйте параметр запроса
fields
). - Исправление : запрос на обновление, при котором вы отправляете только те поля, которые хотите изменить (используйте HTTP-команду
PATCH
).
Более подробная информация о выполнении частичных запросов представлена в следующих разделах.
Частичный ответ
По умолчанию сервер отправляет обратно полное представление ресурса после обработки запросов. Для повышения производительности вы можете попросить сервер отправлять только те поля, которые вам действительно нужны, и вместо этого получать частичный ответ .
Чтобы запросить частичный ответ, используйте параметр запроса fields
, чтобы указать поля, которые вы хотите вернуть. Вы можете использовать этот параметр с любым запросом, который возвращает данные ответа.
Обратите внимание, что параметр fields
влияет только на данные ответа; это не влияет на данные, которые вам нужно отправить, если таковые имеются. Чтобы уменьшить объем данных, отправляемых при изменении ресурсов, используйте запрос на исправление .
Пример
Патч (частичное обновление)
Вы также можете избежать отправки ненужных данных при изменении ресурсов. Чтобы отправлять обновленные данные только для определенных полей, которые вы меняете, используйте команду HTTP PATCH
. Семантика исправлений, описанная в этом документе, отличается (и проще), чем для старой реализации частичного обновления GData.
Короткий пример ниже показывает, как использование патча сводит к минимуму объем данных, которые необходимо отправить для создания небольшого обновления.
Пример
Обработка ответа на патч
После обработки действительного запроса на исправление API возвращает код ответа HTTP 200 OK
вместе с полным представлением измененного ресурса. Если API использует ETag, сервер обновляет значения ETag при успешной обработке запроса на исправление, как и в случае с PUT
.
Запрос на исправление возвращает полное представление ресурса, если только вы не используете параметр fields
, чтобы уменьшить объем возвращаемых данных.
Если запрос на исправление приводит к новому состоянию ресурса, которое является синтаксически или семантически недопустимым, сервер возвращает код состояния HTTP 400 Bad Request
или 422 Unprocessable Entity
, и состояние ресурса остается неизменным. Например, если вы попытаетесь удалить значение обязательного поля, сервер вернет ошибку.
Альтернативная запись, если HTTP-команда PATCH не поддерживается.
Если ваш брандмауэр не разрешает запросы HTTP PATCH
, выполните запрос HTTP POST
и установите для заголовка переопределения значение PATCH
, как показано ниже:
POST https://www.googleapis.com/... X-HTTP-Method-Override: PATCH ...
Разница между патчем и обновлением
На практике, когда вы отправляете данные для запроса на обновление, использующего команду HTTP PUT
, вам нужно отправлять только те поля, которые являются обязательными или необязательными; если вы отправляете значения для полей, установленных сервером, они игнорируются. Хотя это может показаться еще одним способом частичного обновления, у этого подхода есть некоторые ограничения. При обновлениях, использующих команду HTTP PUT
, запрос не будет выполнен, если вы не укажете обязательные параметры, и очистит ранее установленные данные, если вы не укажете необязательные параметры.
По этой причине гораздо безопаснее использовать патч. Вы предоставляете данные только для тех полей, которые хотите изменить; поля, которые вы пропускаете, не очищаются. Единственное исключение из этого правила возникает с повторяющимися элементами или массивами: если вы опустите их все, они останутся такими, какие есть; если вы предоставите какой-либо из них, весь набор будет заменен предоставленным вами набором.