Синхронизация заявок API 2.0¶
Этот сценарий предназначен для 1С/ERP, которая должна получать изменения заявок из CARGO.RUN и надёжно подтверждать их обработку.
1. Какие каналы нужны¶
| Канал | Назначение |
|---|---|
GET /api/bids/GetListForExternal |
Первичная загрузка, статусы, удаления, периодическая сверка |
POST/GET /api/tasks/queue |
Оперативное асинхронное получение накопленных изменений |
API 2.0 не заменяет GetListForExternal: он не гарантирует все смены статуса и
удаления.
2. Первичная загрузка¶
- Зафиксируйте
windowEndперед началом выборки. - Прочитайте все страницы
GetListForExternalдоwindowEnd. - Используйте
$orderby=updatedAt,id, фиксированный$topи последовательный$skip. - Сохраняйте заявки по
idCARGO.RUN.externalIdне уникален. - Обрабатывайте
isDeleted = trueкак изменение. - Продвигайте курсор только после успешной обработки всех страниц.
3. Оперативный цикл¶
- Отдельный пользователь интеграции вызывает
POST /api/tasks/queueсReadдляBid. - Вызов выполняется чаще одного раза в час. Окно изменений в текущей реализации равно одному часу.
- Клиент сохраняет ID задания и ожидает
CompletedилиError. - Клиент проверяет
objects[].statusи сохраняет каждыйSuccessвместе сidиversion. - После фиксации в локальной транзакции клиент отправляет
ReadConfirmation. - При
VersionMismatchклиент повторно читает объект и подтверждает уже новую версию.
Несколько быстрых изменений одной заявки могут объединиться. API 2.0 передаёт последнюю версию объекта, а не журнал всех промежуточных событий.
4. Защита от эха¶
Изменения, записанные тем же пользователем синхронизации, не ставятся ему в очередь входящих изменений. Поэтому:
- используйте для интеграции отдельного пользователя;
- не ожидайте, что собственная запись вернётся через
Read; - после изменяющего запроса проверяйте ответ или повторно читайте объект по
id.
5. Контрольная сверка¶
Выполняйте её:
- по расписанию;
- после перерыва в работе длиннее часа;
- после ошибки
Read,ReadConfirmationили локальной транзакции; - для получения гарантированных смен статуса и удалений.
Выборка должна иметь фиксированные границы по updatedAt, небольшое перекрытие и дедупликацию
по id + updatedAt. Подробности: Синхронизация справочников и заявок.
6. Восстановление¶
Если курсор API 2.0 потерян, не пытайтесь восстановить его из ID последнего задания.
Запустите контрольную выборку GetListForExternal от последней надёжно сохранённой границы.
Технический контракт очереди: Асинхронная очередь API 2.0.