Улучшить производительность

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

По этой причине гораздо безопаснее использовать патч. Вы предоставляете данные только для тех полей, которые хотите изменить; поля, которые вы пропускаете, не очищаются. Единственное исключение из этого правила возникает с повторяющимися элементами или массивами: если вы опустите их все, они останутся такими, какие есть; если вы предоставите какой-либо из них, весь набор будет заменен предоставленным вами набором.