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=<ключ-канала>

Без ключа адрес отвечает как несуществующий. Ключ канала обновлений выдаётся вместе с лицензией и в общем случае одинаков для всех сборок одной версии.

Медиа и большие файлы

Сам файл по каналу синхронизации не идёт — канал передаёт только события и разницу. Содержимое клиент забирает отдельными запросами кусками, чтобы не блокировать канал на большом файле.

Ограничение по числу одновременных каналов — по тарифу (см. тарифы). Канал обновлений в лимит не входит.