API для разработчиков
Через API можно встроить синхронизацию в своё приложение: открыть канал, слушать изменения в папке и отправлять свои. Отдельно — канал обновлений, откуда клиент забирает манифест новой версии. Доступ к API включён на всех тарифах.
Канал синхронизации
Клиент держит один постоянный WebSocket на всё время работы. По нему приходят события об изменениях в отслеживаемых папках и уходят свои. Канал живёт, пока запущено приложение, — это долгое соединение по замыслу, а не сбой.
Ключ доступа — часть пути, а не заголовок: так его проще прокинуть через прокси и балансировщик, которые заголовки могут срезать.
wss://vodatuna.ru/api/ws/<ключ-доступа>
Запрос без ключа или с неизвестным ключом канал не открывает — путь отвечает как несуществующий, чтобы ключи нельзя было перебирать по коду ответа.
События
| Событие | Когда приходит |
|---|---|
file.changed | файл в папке создан или изменён на другом устройстве |
file.removed | файл удалён |
folder.state | полный список файлов папки, приходит сразу после подключения |
sync.done | устройство догналось до актуального состояния |
Пример
const sync = new WebSocket(
"wss://vodatuna.ru/api/ws/" + accessKey
);
sync.onopen = () => {
sync.send(JSON.stringify({ type: "watch", folder: "/Документы" }));
};
sync.onmessage = (e) => {
const ev = JSON.parse(e.data);
if (ev.type === "folder.state") render(ev.files);
if (ev.type === "file.changed") pull(ev.path);
if (ev.type === "file.removed") drop(ev.path);
};
Канал обновлений
Клиент раз в сутки проверяет, вышла ли новая версия. Манифест отдаётся по ключу канала — обычным GET, в ответ приходит текст со списком сборок под каждую платформу.
GET https://vodatuna.ru/sub?token=<ключ-канала>
Без ключа адрес отвечает как несуществующий. Ключ канала обновлений выдаётся вместе с лицензией и в общем случае одинаков для всех сборок одной версии.
Медиа и большие файлы
Сам файл по каналу синхронизации не идёт — канал передаёт только события и разницу. Содержимое клиент забирает отдельными запросами кусками, чтобы не блокировать канал на большом файле.
Ограничение по числу одновременных каналов — по тарифу (см. тарифы). Канал обновлений в лимит не входит.
