API
Объектное хранилище
Единое пространство имён /api/v3/objects/ для наборов параметров, метаданных плит и передачи крупных объектов. Читающая часть открыта и не требует ключа.
Хранилище развёрнуто на двух узлах с одинаковым пространством имён. Узел solanaceae.top принимает запись, узел pi.solanaceae.top отдаёт чтение крупных объектов. Такое разнесение направлений сделано из-за асимметрии нагрузки: исходящий поток плит на порядок больше входящего потока результатов рендера, и держать их на одном хосте невыгодно.
Чтение метаданных
Ответы — обычный JSON, без пагинации и без авторизации. Кэширование обычное, по ETag.
| Запрос | Что возвращает |
|---|---|
GET /api/v3/objects/index.json | перечень всех объектов узла с типами и датами |
GET /api/v3/objects/model-<slug>.json | определение семейства моделей: параметры, диапазоны, значения по умолчанию |
GET /api/v3/objects/plate-<id>.json | метаданные плиты, наборы параметров фигур, ссылки на растровые производные |
GET /api/v3/objects/sequence-<id>.json | метаданные покадровой последовательности |
$ curl -s https://solanaceae.top/api/v3/objects/model-femur.json | head -20
Передача крупных объектов
Плиты в полном разрешении, тайловые пирамиды и наборы для выгрузки передаются не одним запросом, а последовательностью фрагментов в рамках сессии. Точка входа — /api/v3/objects/stream/.
Сессия обозначается параметром sid: это идентификатор, который клиент генерирует сам перед первым запросом и не меняет до конца передачи. Порядковый номер фрагмента передаётся в r и монотонно растёт; повтор запроса с тем же r идемпотентен, что позволяет продолжить прерванную передачу с любого места.
| Метод и путь | Направление | Узел |
|---|---|---|
POST /api/v3/objects/stream/?sid=<id>&r=<n> | клиент → хранилище | solanaceae.top |
GET /api/v3/objects/stream/?sid=<id>&r=<n> | хранилище → клиент | pi.solanaceae.top |
Тело фрагмента — application/octet-stream. Соединение держится открытым на время передачи, тело отдаётся потоком без промежуточной буферизации, поэтому промежуточные прокси не должны включать сжатие на этом пути: поверх уже сжатого потока оно только добавляет задержку.
К каждому запросу добавляется поле выравнивания переменной длины. Оно не несёт данных и нужно, чтобы размеры фрагментов на проводе не повторяли структуру передаваемого объекта. Длина выбирается случайно в заданном диапазоне; получатель поле игнорирует.
Запись требует ключа. Ключи выдаются участникам, которые гоняют рендер на своих машинах, и запрашиваются в комнате проекта. Чтение крупных объектов ключа не требует, но на анонимные сессии действует ограничение по числу одновременных передач.
/api/v2/ обслуживалось
до мая 2026 года и больше не отвечает. Отличия версии 3 — идентификатор сессии в параметрах запроса
вместо заголовка и разнесение направлений по узлам.Ограничения
| Величина | Значение |
|---|---|
| максимальный размер фрагмента | 1 МиБ |
| время жизни сессии без активности | 10 минут |
| одновременных сессий на адрес (без ключа) | 4 |
| формат ответа при ошибке | application/json с полями error и sid |