Единый http сервис на одном порту
This commit is contained in:
@@ -319,7 +319,7 @@ with traces.open_context(alias="email:123", kind="email") as message_trace_id:
|
||||
- Consumer-воркер извлекает через `get(timeout)` и обрабатывает.
|
||||
|
||||
## 5. Application HTTP
|
||||
`PLBA` поддерживает отдельный прикладной HTTP-слой для пользовательских страниц и API бизнес-приложения. Он не смешивается с `control plane` и поднимается отдельным сервисом внутри того же runtime.
|
||||
`PLBA` поддерживает прикладной HTTP-слой для пользовательских страниц и API бизнес-приложения. По умолчанию он отделён от `control plane`, но при необходимости можно опубликовать control routes и business routes через один HTTP channel.
|
||||
|
||||
`Control Plane` и `Application HTTP` обслуживают разные контуры:
|
||||
- `Control Plane` используется для `/health`, `/actions/*`, `/traces/*`.
|
||||
@@ -330,6 +330,7 @@ with traces.open_context(alias="email:123", kind="email") as message_trace_id:
|
||||
- `HttpApplicationChannel` поднимает отдельный `FastAPI` app через `uvicorn`.
|
||||
- `HttpRouteRegistrar` регистрирует пользовательские routes и получает `ServiceContainer`.
|
||||
- `HttpApplicationAppFactory` собирает `FastAPI(title="PLBA Application API")`, middleware и routes.
|
||||
- `UnifiedHttpService` собирает один `FastAPI` app с control routes (`/health`, `/actions/*`, `/traces/*`) и application routes.
|
||||
|
||||
### Минимальный пример
|
||||
```python
|
||||
@@ -370,6 +371,20 @@ runtime.start()
|
||||
- `GET /demo`
|
||||
- `POST /demo/api/tasks`
|
||||
|
||||
### Единый HTTP API
|
||||
Если бизнес-приложению нужен один опубликованный порт для control и application routes, передайте `UnifiedHttpService` как `application_http`:
|
||||
|
||||
```python
|
||||
from plba import HttpApplicationChannel, RuntimeManager, UnifiedHttpService
|
||||
|
||||
runtime = RuntimeManager(application_http=UnifiedHttpService())
|
||||
runtime.application_http.register_channel(
|
||||
HttpApplicationChannel(host="0.0.0.0", port=15000, timeout=5)
|
||||
)
|
||||
```
|
||||
|
||||
Старый режим с отдельными `ControlPlaneService` и `ApplicationHttpService` остаётся доступен и работает как раньше.
|
||||
|
||||
### Типовые сценарии
|
||||
- `Web UI для фоновых задач`: список задач, запуск, статус, cancel, download result.
|
||||
- `Внутренний REST API`: например `POST /jobs`, `GET /jobs/{id}`, `POST /jobs/{id}/cancel`.
|
||||
@@ -377,7 +392,7 @@ runtime.start()
|
||||
- `Webhook endpoint`: прием callback от внешней системы и передача события в worker pipeline.
|
||||
|
||||
### Ограничения и рекомендации
|
||||
- Не смешивайте business routes с `control plane`.
|
||||
- По умолчанию держите business routes и `control plane` раздельно; используйте `UnifiedHttpService`, когда один опубликованный порт является явным эксплуатационным требованием.
|
||||
- Держите бизнес-логику в сервисах, а handlers используйте как тонкий HTTP-адаптер.
|
||||
- Runtime предоставляет доступ к зависимостям через `services`, поэтому handlers не должны зависеть от `RuntimeManager`.
|
||||
- В первой версии `Application HTTP` не решает auth, static files, шаблонизаторы, websocket и OpenAPI customization.
|
||||
|
||||
Reference in New Issue
Block a user