Каталог
Каталог
Скачайте полный каталог продуктов и работайте с ним офлайн
Полный каталог продуктов — каждый товар, доступный для заказа, с его ценой,
запасом, типом продукта и формой ввода — публикуется как единый снимок для
скачивания. Вы скачиваете его, читаете локально и используете id каждого
товара и его fields, чтобы размещать заказы. Нет пагинированного эндпоинта
«list products» для программного использования; снимок и есть каталог.
URL для скачивания:
Предоставляется через CDN cdn.voodoo.center. Для скачивания аутентификация не требуется.
Персональный каталог
URL выше предоставляет глобальный каталог, который использует стандартные
цены. Если ваш аккаунт имеет персональные (согласованные) цены —
переопределения цены для отдельных товаров — существует отдельный персональный
каталог, опубликованный по URL, содержащему client id вашего аккаунта. Он
содержит те же записи, но price и subscriber_price отражают цены вашего
аккаунта. Используйте персональный файл, если он существует; иначе используйте
глобальный.
URL для скачивания персонального каталога:
Найдите свой Client ID — и готовый к использованию URL персонального
каталога — на странице API в дашборде (та же страница, где вы управляете
API-ключами и webhook). Не каждый аккаунт имеет персональные цены: если ваш не
имеет, этот URL возвращает 404 — в таком случае вернитесь к catalog.lmdb.zst.
Это тот же формат и схема, что и у глобального каталога (сжатая zstd однофайловая база данных LMDB); единственное различие — значения цен. Итак: попробуйте свой персональный URL, вернитесь к глобальному при 404, а затем распакуйте, откройте и прочитайте файл точно так, как показано ниже.
Что вы получаете
catalog.lmdb.zst — это однофайловая база данных LMDB,
сжатая с помощью zstandard:
- Один файл, одно пространство ключей. Товары хранятся в базе данных LMDB по умолчанию. Каждый товар — это одна запись: ключ = 8-байтный item id в формате big-endian, значение = компактный JSON-объект.
- Самодостаточные записи. Каждый товар встраивает полную форму ввода
(
fields, где каждое поле выбора имеет своиoptions) встроенно, поэтому единственный поиск по ключу даёт вам всё необходимое для заказа этого товара. - Маленький и быстрый. Полный каталог сжимается примерно в 45× (база данных ~1,5 МБ → ~34 КБ). Вы распаковываете один раз, а затем отображаете базу данных в память и читаете её без обращений к серверу.
Цены в каталоге указаны в центах (целые числа) и отражают стандартные цены. Ваше финальное списание всегда подтверждается ответом заказа и вашим балансом — см. Размещение заказов.
Скачивание и открытие
Установите два ридера, а затем скачайте → распакуйте → откройте только для чтения.
★ Пояснение ─────────────────────────────────────
LMDB отображается в память, поэтому открытие файла практически бесплатно, а
поиски читаются прямо из кеша страниц ОС — вы можете держать окружение открытым
и обращаться к нему миллионы раз, ничего не перечитывая заново. Именно поэтому
каталог поставляется как LMDB, а не как один огромный JSON-массив.
─────────────────────────────────────────────────
Схема записи
Каждое значение — это JSON-объект:
Каждая запись в fields:
Использование каталога с Orders API
Всё, что нужно для построения запроса POST /api/v1/orders, есть в записи:
item_id=idзаписи.quantity— ограниченаmin_quantity/max_quantity. Обязательна дляtopup(десятичная) иkey(целая, по умолчанию1); пропустите дляservice.fields— обязательны только дляtopupиservice. Индексируйте каждую запись поnameполя. Для поляchoiceотправляйтеidвыбранного варианта (целое число), а не егоvalue. Для текстовых полей отправляйте строку.
Поддержание актуальности
Снимок регулярно перегенерируется. Его свежесть — это HTTP-заголовки ETag /
Last-Modified объекта; используйте условный запрос, чтобы повторно скачивать
только тогда, когда он действительно изменился:
Простой и надёжный подход для работающей интеграции: обновляйте по расписанию (например, каждые несколько минут) условным запросом выше, и когда приходит новый файл, распаковывайте его и заменяйте открытое окружение LMDB.