Frontend Facade
Frontend Facade
Заголовок раздела «Frontend Facade»Раздавайте веб-UI Wippy из приложения, состоящего только из бэкенда, с помощью
wippy/facade. Фасад — это тонкая статическая оболочка: она загружает фронтенд-бандл
Wippy Web Host из CDN и конфигурирует его из JSON-эндпоинта, который раздаёт ваше
приложение — без шага сборки фронтенда в вашем проекте. Брендинг, темизация и
фича-флаги полностью управляются параметрами зависимости.
Что вы построите
Заголовок раздела «Что вы построите»Бэкенд-приложение, которое раздаёт UI Wippy:
- HTTP-сервер и публичный роутер.
- Зависимость
wippy/facade, подключённую к этому серверу и роутеру, с собственным брендингом. - Работающую оболочку по адресу
/и её конфигурацию по/api/public/facade/config.
Предварительные требования
Заголовок раздела «Предварительные требования»-
Проект Wippy (склонируйте app-template или выполните
wippy init). -
Установленный фасад:
Окно терминала wippy add wippy/facadewippy install
Как это работает
Заголовок раздела «Как это работает»index.htmlраздаётся как статический файл с вашего HTTP-сервера.- При загрузке он запрашивает
GET /api/public/facade/config. - Он проверяет
localStorageна наличие токена авторизации, перенаправляя наlogin_path, если его нет. - Он импортирует бандл Web Host из CDN (
facade_url + '/module.js') и вызываетinitWippyApp(...)с конфигурацией.
Ваше приложение поставляет только оболочку и конфигурацию; сам UI приходит из CDN.
Зависимости
Заголовок раздела «Зависимости»Фасаду нужны две вещи от вашего приложения: http.service для раздачи файлов и
http.router, на который монтируется его эндпоинт конфигурации. Всё остальное —
необязательный брендинг с разумными значениями по умолчанию.
version: "1.0"namespace: app
entries: - name: gateway kind: http.service addr: :8087 lifecycle: auto_start: true
- name: api.public kind: http.router meta: server: app:gateway prefix: /api/public
- name: facade kind: ns.dependency component: wippy/facade parameters: - name: server value: app:gateway - name: router value: app:api.public - name: app_title value: Verify AppПоставляемый index.html запрашивает /api/public/facade/config, поэтому префикс
публичного роутера должен быть /api/public, чтобы оболочка по умолчанию нашла свою
конфигурацию.
wippy runОболочка раздаётся из корня сервера, а эндпоинт конфигурации возвращает рантайм-конфигурацию:
curl http://localhost:8087/api/public/facade/config{ "mode": "compat", "facade_url": "https://web-host.wippy.ai/webcomponents-1.0.32", "iframe_origin": "https://web-host.wippy.ai", "iframe_url": "https://web-host.wippy.ai/webcomponents-1.0.32/iframe.html?waitForCustomConfig", "module_file": "/module.js", "login_path": "/login.html", "env": { "APP_API_URL": "", "APP_AUTH_API_URL": "", "APP_WEBSOCKET_URL": "" }, "theming": { "host": { "i18n": { "app": { "title": "Verify App", "icon": "wippy:logo", "appName": "Wippy AI" } } } }, "hostConfig": { "showAdmin": true, "allowSelectModel": false, "hideNavBar": false, "session": { "type": "non-persistent" }, "history": "hash" }}Обратите внимание, как параметр app_title проявляется как theming.host.i18n.app.title.
Конфигурация
Заголовок раздела «Конфигурация»Параметры передаются как parameters зависимости (значения — строки; JSON-значения —
JSON-кодированные строки). Распространённые из них:
| Параметр | Назначение |
|---|---|
server / router | (обязательные) HTTP-сервер и публичный роутер |
app_title / app_name / app_icon | Брендинг (иконка — ссылка Iconify) |
show_admin / hide_nav_bar | Фича-флаги ("true" / "false") |
login_path | Куда оболочка перенаправляет, когда токен авторизации отсутствует |
session_type | non-persistent или cookie |
history_mode | hash или browser |
css_variables | JSON-строка с CSS-переменными, например '{"--p-primary":"#6366f1"}' |
fe_facade_url | URL бандла CDN (зафиксирован для каждого релиза фасада; оставьте по умолчанию, если не переопределяете) |
Два значения выводятся в рантайме из переменной окружения PUBLIC_API_URL, а не из
параметров: базовый URL API и URL WebSocket (http→ws, https→wss). Если она не
задана, браузер откатывается на window.location.origin.
Заметки
Заголовок раздела «Заметки»- Фасад не предоставляет аутентификацию. Он ожидает поток авторизации, который
записывает токен в
localStorage; без него он перенаправляет наlogin_path. Сочетайте его сuserspace/usersили вашей собственной авторизацией. - Бандл UI загружается из CDN (
fe_facade_url), поэтому работающему приложению нужен исходящий сетевой доступ для отрисовки.
Следующие шаги
Заголовок раздела «Следующие шаги»- Hello World — минимальная структура проекта
- Authentication — подключите поток входа, который ожидает оболочка
- HTTP Endpoints — роутеры, статические файлы и обработчики