Client Sync API

Минимальный контракт доставки контента: один GET-запрос на ключ. Только HTTPS, только чтение. Изменения контракта анонсируем в блоге.

Запрос

GET /api/v1/sync/<key>?did=<device-uuid>&feed=<channel> HTTP/2
Host: sync.yakvndzen.com
ПараметрГдеОбязателенОписание
<key>pathдаOpaque-ключ клиента, выдаётся при подключении. Персональный: не публикуйте и не встраивайте в клиентские сборки.
didqueryдаИдентификатор устройства (UUID), выдаётся при привязке устройства к ключу. Запрос без did завершается ошибкой 400.
feedqueryнетКанал контента: stable (по умолчанию) или beta. Набор доступных каналов определяется вашим тарифом.

Методы

Только GET и HEAD. Остальные методы отклоняются на границе (403).

GET идемпотентен: повторный запрос с теми же параметрами возвращает тот же снапшот контента. Ретраи безопасны — при сетевых сбоях просто повторяйте запрос, при желании с экспоненциальной паузой.

Ответ 200

Диагностика отказа

При отказе (403, 429) может передаваться заголовок X-Sub-Reason — краткая машинная причина для логов поддержки (например key-revoked, rate-limit). Заголовок диагностический: наличие и набор значений контрактом не гарантируются — в логику клиента закладывать его нельзя.

Коды ответов

КодЗначениеЧто делать
200Снапшот контента в теле (base64)Распаковать клиентской библиотекой.
400Некорректный запрос — как правило, отсутствует didПроверить параметры запроса.
403Ключ недействителен или отозван; также так выглядят запросы методами, отличными от GET/HEADПеревыпустить ключ через поддержку.
404Ключ неизвестенПроверить ключ: опечатка, другой контур окружения.
429Превышен лимит запросовПодождать Retry-After секунд и повторить.

Лимиты

Лимит — 60 запросов в минуту на ключ. Лимит пер-ключевой, а не пер-адрес: несколько устройств на одном ключе делят общую квоту, поэтому при большой матрице устройств запрашивайте ключ на платформу (или на сегмент устройств). При превышении сервер отвечает 429 и заголовком Retry-After.

Примеры

curl "https://sync.yakvndzen.com/api/v1/sync/b7f3e9a2c41d?did=3f8a1c62-9d04-4b7e-a1f2-6c39e2b7c1d8&feed=stable"
# нет did -> 400
curl -i "https://sync.yakvndzen.com/api/v1/sync/b7f3e9a2c41d?feed=stable"
# неизвестный ключ -> 404
curl -i "https://sync.yakvndzen.com/api/v1/sync/000000000000?did=3f8a1c62-9d04-4b7e-a1f2-6c39e2b7c1d8"

Чего в API нет

Намеренно: никаких POST-выгрузок, вебсокет-потоков и пагинации. Один GET — один полный снапшот. Крупность фидов решается секционированием внутри тела — как мы это делаем.