Требования и ограничения
Ограничения при работе с API
Ограничение частоты запросов — не более 10 запросов в секунду на контакт.
При количестве запросов более 10 rps, сервер ответит статусом — код 429 Too Many Requests.
Повторите запрос через 100 мс, в случае повторного получения ответа 429 увеличивайте время ожидания в два раза (100 мс, 200 мс, 400мс и т.д.).
Ограничения при работе с конкретными эндпоинтами
PUT api.ati.su/v2/cargos/{guid}
Ограничение частоты: не более 5000 запросов за 24 часа на один контакт. При достижении лимита сервер возвращает 429 Too Many Requests в течение 24 часов.
POST api.ati.su/v2/cargos
POST api.ati.su/v1.0/loads
Ограничение частоты: не более 500 запросов на создание грузов за 24 часа на один контакт. Лимит обнуляется ежедневно в 00:00.
Общий лимит для фирмы рассчитывается так: количество контактов × 500 — это суточный суммарный лимит на все операции всех контактов.
При достижении лимита сервер возвращает статус-код 429 Too Many Requests. Новые запросы будут отклоняться до следующего обнуления в 00:00.
Пример. У фирмы 3 контакта — общий лимит 3 × 500 = 1500 операций в сутки. После достижения 1500 операций все последующие запросы на выполнение операции до 00:00 будут отклоняться сервером с кодом
429 Too Many Requests.
Требования к http запросам
С 1 июля 2022 года не гарантируется работоспособность интеграций, которые не удовлетворяют следующим требованиям
Передавать обязательные заголовки
Accept-Encoding:gzip, deflate, br. Ожидается, что приложение должно уметь принимать сжатый контент.User-Agent:ati_integrator_<код в ATI.SU>, например,ati_integrator_64357Authorization:Bearer {authorizationToken}, кроме метода получения токенаContent-Type:application/jsonAccept:application/jsonилиtext/xml
Использовать https (TLS 1.2 или TLS 1.3)
Поддержка схемы http прекращается с 1 августа 2022 года
Поддержать автоматический редирект
В случае ответов сервера со статусами 301 и 302, необходимо следовать редиректам по указанному в заголовке Location адресу.
Делать retry на запросы, упавшие с ошибкой сокета
Симптомы: ошибки ECONNRESET(104) и ENOTCONN (107)
Пример реализации на C#
private HttpClient _client = new HttpClient();private async Task<T> DoHttpCall<T>(string url){ var tries = 3; do { try { var response = await _client.GetAsync(url); var result = await response.Content.ReadFromJsonAsync<T>(); return result; } catch (HttpRequestException) { } tries--; } while (tries > 0); return default;}