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/facade wippy 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 — роутеры, статические файлы и обработчики