test(portal): harden api contract validation
This commit is contained in:
+10
-3
@@ -12,6 +12,7 @@ DPD нужен для безопасной эволюции интерфейса
|
||||
- `/dpd/` работает как полный mirror текущего портала;
|
||||
- будущий React/Tauri UI сможет использовать те же API-контракты;
|
||||
- новые UI-решения проверяются без cutover и без дублирования бизнес-логики.
|
||||
- будущий UI не парсит HTML текущего портала как источник данных.
|
||||
|
||||
DPD проксирует:
|
||||
|
||||
@@ -77,9 +78,15 @@ detmir-dpd-portal \
|
||||
- `/dpd/api/contracts/openapi.json`;
|
||||
- `/dpd/api/contracts/typescript.d.ts`.
|
||||
|
||||
Правило совместимости: изменения API должны быть additive. Клиенты React/Tauri
|
||||
обязаны игнорировать неизвестные поля и корректно обрабатывать отсутствующие
|
||||
optional-поля.
|
||||
Правила совместимости:
|
||||
|
||||
- изменения API должны быть additive;
|
||||
- клиенты React/Tauri обязаны игнорировать неизвестные поля;
|
||||
- optional-поля могут отсутствовать;
|
||||
- `null` не должен ломать UI;
|
||||
- breaking changes требуют version bump контракта и отдельного architecture
|
||||
decision;
|
||||
- будущий React/Tauri UI не должен парсить HTML текущего портала.
|
||||
|
||||
## Проверка симметрии
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
React/Tauri-интерфейса без переписывания backend-логики.
|
||||
|
||||
Текущий HTML-портал остаётся рабочим и основным. Новый UI должен подключаться к
|
||||
тем же endpoint-ам через documented contract.
|
||||
тем же endpoint-ам через documented contract и не должен парсить HTML.
|
||||
|
||||
## Контрактные endpoint-ы
|
||||
|
||||
@@ -30,6 +30,12 @@ DPD mirror:
|
||||
- Клиенты обязаны корректно обрабатывать отсутствующие optional-поля.
|
||||
- Поля с `null` не должны ломать UI.
|
||||
- Ошибки API должны отображаться пользователю на русском языке.
|
||||
- Breaking changes требуют отдельного version bump контракта и architecture
|
||||
decision.
|
||||
- Будущий React/Tauri UI не должен парсить HTML-страницы, CSS или встроенный
|
||||
JavaScript текущего портала как источник данных.
|
||||
- Бизнес-логика остаётся на стороне Rust backend/API; frontend только
|
||||
отображает и отправляет пользовательские действия через контрактные endpoint-ы.
|
||||
|
||||
## Минимальный набор для будущего React/Tauri UI
|
||||
|
||||
@@ -52,6 +58,7 @@ DPD mirror:
|
||||
- Маршрут `/portal/` остаётся стабильным.
|
||||
- DPD `/dpd/` остаётся параллельным mirror.
|
||||
- Backend-расчёты, JSON-хранилища и workflow не дублируются во frontend.
|
||||
- Публичные JSON-поля не переименовываются без новой версии контракта.
|
||||
|
||||
## Проверка
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
```text
|
||||
Backend/API: Rust
|
||||
Agent: Rust
|
||||
Current Portal: Rust server-rendered HTML + HTMX-ready static UI
|
||||
Current Portal: Rust server-rendered HTML + HTMX
|
||||
Future Enterprise UI: React + TypeScript
|
||||
Future Desktop Forensics: Tauri + React + Rust core
|
||||
Dioxus: out of scope / не рассматривается
|
||||
@@ -15,14 +15,15 @@ Dioxus: out of scope / не рассматривается
|
||||
|
||||
## Правила
|
||||
|
||||
- Текущий HTML/HTMX-ready портал остаётся основным pilot/production
|
||||
интерфейсом.
|
||||
- Текущий HTML/HTMX портал остаётся основным pilot/production интерфейсом.
|
||||
- JSON API является контрактным слоем для будущих UI.
|
||||
- Бизнес-логика не должна зависеть от HTML.
|
||||
- Будущий React/Tauri UI не должен ломать текущий портал.
|
||||
- Agent и backend остаются Rust-first.
|
||||
- Новые UI-фреймворки не добавлять без отдельного architecture decision.
|
||||
- Dioxus не добавлять и не рассматривать.
|
||||
- Будущий React/Tauri UI не должен парсить HTML текущего портала как источник
|
||||
данных.
|
||||
|
||||
## Практическое следствие
|
||||
|
||||
@@ -32,6 +33,8 @@ Dioxus: out of scope / не рассматривается
|
||||
2. Зафиксировать стабильные JSON API-контракты.
|
||||
3. Поддерживать DPD `/dpd/` как параллельный mirror для проверки совместимости.
|
||||
4. Готовить будущий React/Tauri UI только поверх опубликованных контрактов.
|
||||
5. Любые breaking changes проводить только через version bump контракта и
|
||||
отдельное architecture decision.
|
||||
|
||||
## Контрактный слой
|
||||
|
||||
@@ -48,5 +51,5 @@ DPD mirror endpoints:
|
||||
- `/dpd/api/contracts/typescript.d.ts`.
|
||||
|
||||
Правило совместимости: изменения API должны быть additive. Клиенты обязаны
|
||||
игнорировать неизвестные поля и корректно обрабатывать отсутствующие optional
|
||||
поля.
|
||||
игнорировать неизвестные поля, корректно обрабатывать отсутствующие optional
|
||||
поля и не падать на `null`.
|
||||
|
||||
Reference in New Issue
Block a user