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