Вызовы API: меньше работы и контролируемые повторы

Кратко

Эффективный API сокращает ненужные обмены, сохраняя актуальность и правильность данных. Число вызовов, объём и время ожидания измеряют отдельно.

Пустой защищённый коридор серверов и сетевого оборудования
В этой статье

Сравнивать один сценарий

Условный пример с десятичными килобайтами: сначала 100 вызовов по 100 kB, затем 20 по 50 kB. Объём уменьшается с 10000 до 1000 kB, на 90 %. Такое же сокращение задержки из этого не следует. Учитываются только тела ответов, без запросов и заголовков.

Условный показательИсходныйКандидат
Вызовы10020
Объём ответа100 kB50 kB
Общий объём10000 kB1000 kB
Длительность сценарияИзмеритьИзмерить

Сначала сокращать работу

  • Запрашивайте нужные поля и соблюдайте правила пагинации. Пакетам нужны ограничения и обработка частичных результатов; большая страница не всегда быстрее.
  • Повторно используйте соединения и ответы при допустимых контексте и свежести. Ограничивайте параллелизм, измеряйте очереди и работу сервера.
  • Задайте общий срок и предел попыток. Разносите повторы временных сбоев случайной составляющей ожидания; проверьте повторы на всех уровнях.

Не выполнять завершённое действие дважды

Тайм-аут клиента не доказывает отмену на сервере. До повторного создания или платежа проверьте состояние и механизм идемпотентности поставщика. Сравните длительность, ошибки и правильность при типичной нагрузке.

Первоисточники

Анализ работы, стоящей за одним ответом API.

Один запрос GraphQL может инициировать множество последующих вызовов. Задержка, видимая клиенту, может скрывать стоимость резолверов, списков и пройденных связей.

  • Отслеживание операции от клиента до последующих сервисов.
  • Сравнение стоимости поля и фактически полезного объема.
  • Ограниченные списки и повторяющиеся запросы перед кэшированием.

Первичный источник: OWASP — GraphQL Cheat Sheet. Связанный метод: прочитать практическое руководство.

Retry-After: ожидание, бюджет и повтор

Подробные справочные заметки в этой версии доступны на английском.

Reducing API calls includes controlling repetition

An API optimisation should count attempts reaching the dependency rather than only requests initiated by the screen.

  • Trace SDK and proxy retries under one logical identifier.
  • Avoid shortening server instructions merely to fit a budget.
  • Verify an uncertain write’s state before creating a new intention.

Explore Retry-After and the retry model →

References reviewed · RFC 9110 · §9.2.2, §10.2.3 · RFC 6585 · §4 · AWS