BimpДовідка

Ліміти API, пагінація і помилки

Оновлено 3 хв читання

На цій сторінці
Коротко

API Bimp приймає до 15 запитів на секунду з одного IP; надлишок стає в чергу на 30 запитів, а що не вмістилося — отримує відповідь 429. Списки пагінуються трьома способами: offset/count, page/pageSize і курсором limit/lastId. Помилки мають різні форми залежно від методу.

Який ліміт запитів до API

Максимум — 15 запитів на секунду з одного IP-адреса. Запити понад ліміт не відхиляються одразу, а стають у чергу розміром 30 запитів і обробляються в наступні секунди. Запити, які не вмістилися в чергу, повертаються з помилкою HTTP 429.

Для масових вивантажень тримайте швидкість нижче 15 запитів на секунду і виконуйте запити послідовно, а не в кілька паралельних потоків з одного IP.

Що робити з відповіддю 429

Відповідь 429 означає перевищення ліміту. Її тіло має таку форму:

{
  "success": false,
  "error": {
    "code": 429,
    "message": "<message>",
    "details": "<details>",
    "retryAfter": 1
  }
}

Зачекайте error.retryAfter і повторіть запит. Якщо 429 повторюється, збільшуйте паузу експоненційно (1 с, 2 с, 4 с).

Які види пагінації є в API

API використовує три види пагінації, залежно від методу.

ВидПараметриЛіміти за специфікацієюДе використовується
Offsetоб’єкт pagination з offset і count у тілі POSToffset від 0; count за замовчуванням 10, максимум 100більшість методів readList і readExternalIdsList
Pagepage і pageSize у рядку запиту GETpage за замовчуванням 1; pageSize за замовчуванням 50, максимум 100/org2/inventory/api-readList
Cursorlimit і lastId у рядку запиту GETlimit за замовчуванням 50, максимум 200/org2/inventory/api-readList/cursor, /org2/inventory/kits/api-readList/cursor

Offset-пагінація

Передайте pagination у тілі запиту і збільшуйте offset на count, доки відповідь не стане коротшою за count:

curl -X POST https://app.bimpsoft.com/org2/invoiceForCustomerPayment/api-readList \
  -H "access-token: <COMPANY_ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"pagination": {"offset": 100, "count": 100}}'

Максимальне значення count дивіться в довіднику конкретного методу.

Курсорна пагінація

Курсорна пагінація призначена для великих наборів (понад 5000 позицій). Параметри orgId і warehouseId обов’язкові. Першим запитом не передавайте lastId, а в наступних підставляйте data.next_cursor з попередньої відповіді:

curl -G https://app.bimpsoft.com/org2/inventory/api-readList/cursor \
  -H "access-token: <COMPANY_ACCESS_TOKEN>" \
  --data-urlencode "orgId=<ORG_UUID>" \
  --data-urlencode "warehouseId=<WAREHOUSE_UUID>" \
  --data-urlencode "limit=200" \
  --data-urlencode "lastId=<NEXT_CURSOR>"

Відповідь:

{
  "success": true,
  "data": {
    "items": [
      { "productId": "<UUID>", "barcode": "", "article": "A-100", "quantity": 12, "reserved": 2, "available": 10, "batchId": null }
    ],
    "next_cursor": "<UUID>",
    "next_cursor_batch_id": null
  }
}

Якщо ввімкнено byBatches=true, залишки розбиваються за партіями; тоді разом із lastId передайте lastBatchId зі значення next_cursor_batch_id (пропустіть, якщо воно null). Вивантаження залишків повністю — див. Вивантаження залишків і цін на сайт.

Як виглядають помилки

Форма тіла помилки залежить від методу, тому обробляйте насамперед HTTP-код, а потім тіло.

КодКолиФорма тіла за специфікацією
422помилка валідації запиту{"error": "...", "message": "...", "details": "..."} (error і message обов’язкові)
404об’єкт не знайдено (наприклад, /org2/inventory/api-read/{productHex}/stock){"status": "error", "message": "..."}
429перевищено ліміт запитів{"success": false, "error": {"code": 429, "message", "details", "retryAfter"}}

Успішні відповіді мають вигляд {"success": true, "data": ...}. Деякі методи повертають у data значення null, коли об’єкта немає (наприклад, readByExternalId).

Типові проблеми

Масове вивантаження періодично повертає 429. Причина: перевищено 15 запитів на секунду з одного IP, а черга на 30 запитів заповнилася. Рішення: надсилайте запити послідовно з паузою і повторюйте після retryAfter.

Offset-вивантаження великого списку працює дедалі повільніше. Причина: глибокі сторінки offset-пагінації дорожчі. Рішення: для залишків користуйтеся курсорним методом, для інших списків звужуйте вибірку фільтрами за періодом.

Часті питання

Скільки запитів на секунду дозволяє API Bimp?

До 15 запитів на секунду з одного IP. Надлишок потрапляє в чергу розміром 30 запитів і обробляється в наступні секунди; запити, що не вмістилися в чергу, повертаються з помилкою 429.

Що робити з відповіддю 429?

Зачекайте і повторіть запит. Тіло відповіді 429 містить поле error.retryAfter. Надалі тримайте частоту запитів нижче 15 на секунду.

Яку пагінацію обрати для вивантаження всіх залишків?

Курсорну: GET /org2/inventory/api-readList/cursor. Вона призначена для великих наборів даних і не сповільнюється на глибоких сторінках.

Стаття допомогла?

Читайте далі

Не знайшли відповідь?Напишіть нам — підтримка відповідає в робочий час.