4.1 KiB
4.1 KiB
D4.3 Матрица совместимости (Web + iOS + Android)
Дата: 2026-03-07
Статус: done
Владелец: Engineering
1) Цель
- Зафиксировать единый контракт, чтобы
web,iOS,Androidпереиспользовали одно Go-ядро (/api/v1) без платформенных форков бизнес-логики. - Явно обозначить ограничения transport-runtime и ожидания к клиентам.
2) Инвариант архитектуры
- Все transport-клиенты (
singbox,dnstt,phoenix) запускаются на стороне хоста сselective-vpn-apiчерез backend-адаптеры. web/iOS/Androidявляются control-plane клиентами: вызывают API, читают состояние, запускают validate/apply flow.- Платформы не должны управлять локальными
systemd/бинарями напрямую.
3) Платформенная матрица API-контракта
| Контур | Web (Vite + React + TS) |
iOS | Android |
|---|---|---|---|
| Базовый API | GET/POST /api/v1/* |
GET/POST /api/v1/* |
GET/POST /api/v1/* |
| Realtime | SSE (/api/v1/events/stream) в foreground |
SSE в foreground, polling fallback в background | SSE в foreground, polling fallback в background |
| Transport capabilities | GET /api/v1/transport/capabilities |
тот же endpoint | тот же endpoint |
| Policy flow | GET /policies, POST /validate, POST /apply, POST /rollback |
тот же flow | тот же flow |
| Auth/TLS | gateway/proxy + token | gateway/proxy + token + secure storage | gateway/proxy + token + secure storage |
| Error contract | ok/code/message/exitCode/stderr |
идентично | идентично |
4) Матрица transport backend vs платформы
| Transport backend (в Go-ядре) | Web UI | iOS UI | Android UI | Ограничения |
|---|---|---|---|---|
singbox |
Поддержан через API | Поддержан через API | Поддержан через API | runtime на сервере, не в мобильном UI |
dnstt (+ ssh_overlay) |
Поддержан через API | Поддержан через API | Поддержан через API | SSH overlay оркестрируется backend-ом |
phoenix -> slipstream |
Поддержан через API | Поддержан через API | Поддержан через API | подключение/health/metrics только через backend |
5) Runtime/packaging ограничения
- Поддерживаемый runtime mode на текущем этапе:
exec=true. embedded=false,sidecar=false(зарезервировано, без silent fallback).- Packaging profiles:
system=true,bundled=true. - Практический вывод для платформ:
- UI показывает capabilities и ограничения из backend.
- UI не должен предполагать поддержку
embedded/sidecarдо явного включения в capabilities.
6) Проверка совместимости (smoke)
- Скрипт:
tests/transport_platform_compatibility_smoke.py. - Проверяет:
- наличие
singbox/dnstt/phoenixв/transport/capabilities, runtime_modes.exec=true,packaging_profiles.system=true,packaging_profiles.bundled=true,- рабочий policy-контракт (
/transport/policies,/validate,/conflicts).
- наличие
Команда запуска:
API_URL=http://127.0.0.1:8080 ./tests/transport_platform_compatibility_smoke.py
7) Итог D4.3
- Совместимость
web + iOS + Androidзафиксирована как единый API-контракт control-plane. - Все transport-runtime различия остаются в Go-ядре.
- Это позволяет продолжать backend-first реализацию и затем переиспользовать ту же логику в desktop/web/mobile UI.