CI / changes (push) Successful in 7s
CI / openapi (push) Has been skipped
CI / go (push) Has been skipped
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Has been skipped
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Has been skipped
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Has been skipped
CI / docker-go-prime (push) Has been skipped
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Has been skipped
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Has been skipped
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Has been skipped
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Has been skipped
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Has been skipped
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Has been skipped
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Has been skipped
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Has been skipped
Included a new section in the README to document the integration of `router-lists-ui` with the EvoBGP API, covering key components such as DOMAINS, IP_RANGES, AS_PREFIXES, and communities. This enhances the clarity and usability of the documentation for users.
5.4 KiB
5.4 KiB
Интеграция router-lists-ui с EvoBGP API
Документ описывает подключение разделов Домены, IP-диапазоны, AS, Community из проекта router-lists-ui напрямую к EvoBGP API (/v1).
Источник правды по контракту: openapi.yaml.
1. Базовые требования
- Base URL API:
https://<evobgp-host>/v1 - Аутентификация:
Authorization: Bearer <api_key> - CORS на стороне EvoBGP: переменная
EVOBGP_CORS_ORIGINS - Роли:
- чтение:
viewer+ - изменение данных:
editor+ - apply/деплой:
operator
- чтение:
2. Маппинг legacy -> EvoBGP
| Раздел UI | Legacy endpoint | EvoBGP endpoint |
|---|---|---|
| Домены | /api/domains-new |
/v1/modules?type=DOMAINS + /v1/modules/{module_id}/domain-entries |
| IP-диапазоны | /api/ip-ranges |
/v1/modules?type=IP_RANGES + /v1/modules/{module_id}/ip-range-entries |
| AS | /api/asns |
/v1/modules?type=AS_PREFIXES + /v1/modules/{module_id}/as-entries |
| Community | /api/communities |
/v1/communities |
3. Маппинг полей
| Legacy модель | EvoBGP модель | Комментарий |
|---|---|---|
{ domain, community } |
DomainEntry { fqdn, community_id } |
community в UI резолвится в community_id через /v1/communities |
{ ipRange, community } |
IpRangeEntry { prefix, community_id } |
Для IP_RANGES community_id обязателен |
{ domain, type } (AS) |
AsEntry { asn, community_id } |
domain legacy = ASN |
{ value, name } (Community dict) |
BgpCommunity { community, title } |
value -> community, name -> title |
4. Алгоритм работы по разделам
4.1 Домены / IP / AS (общая схема)
- Найти модуль нужного типа через
GET /v1/modules?type=.... - Если модуль отсутствует, создать через
POST /v1/modules. - Загрузить entries:
- домены:
GET /v1/modules/{module_id}/domain-entries - IP:
GET /v1/modules/{module_id}/ip-range-entries - AS:
GET /v1/modules/{module_id}/as-entries
- домены:
- При сохранении:
- удалить отсутствующие записи (
DELETE .../{entry_id}) - обновить изменённые (
PATCH .../{entry_id}) - добавить новые (
POST ...)
- удалить отсутствующие записи (
4.2 Community
- Получить список:
GET /v1/communities - Для сохранения diff:
- новые ->
POST /v1/communities - изменённые ->
PATCH /v1/communities/{id} - удалённые ->
DELETE /v1/communities/{id}
- новые ->
5. Разрешение community
- Перед работой с entries загрузить
/v1/communities. - Основной путь: сопоставление по
id. - Для UI-формы использовать значение
community(например,65001:120) и перед записью преобразовывать вcommunity_id. - Если community не найдена:
- для
IP_RANGESсчитать ошибкой валидации; - для
DOMAINSиAS_PREFIXESможно передатьnullтолько если это допускается бизнес-логикой.
- для
6. Пагинация и ошибки
- Списки используют
cursor + limit. - Формат ошибок:
application/problem+json(RFC 9457). - Базовая обработка:
401— неверный/отсутствующий токен403— недостаточно прав404— ресурс не найден422— ошибка валидации
7. Примеры (PowerShell)
$base = "http://localhost:8080/v1"
$token = "YOUR_API_KEY"
$h = @{ Authorization = "Bearer $token" }
# 1) Найти модуль DOMAINS
$modules = Invoke-RestMethod -Uri "$base/modules?type=DOMAINS&limit=50" -Headers $h
$moduleId = $modules.items[0].id
# 2) Прочитать домены
Invoke-RestMethod -Uri "$base/modules/$moduleId/domain-entries?limit=100" -Headers $h
# Создать community
$body = @{
community = "65001:120"
title = "Video"
} | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "$base/communities" -Headers $h -ContentType "application/json" -Body $body
8. Настройки router-lists-ui для прямой интеграции
Рекомендуемые переменные frontend:
VITE_EVOBGP_API_URL(по умолчанию/v1)VITE_EVOBGP_API_TOKEN(опционально; либо хранить токен вlocalStorageкакevobgp_api_token)
Для dev-прокси Vite добавить маршрут /v1 -> http://localhost:8080.
9. Контрольный список интеграции
Домены: list/create/update/delete работают через/v1/modules/{id}/domain-entriesIP-диапазоны: list/create/update/delete работают через/v1/modules/{id}/ip-range-entriesAS: list/create/update/delete работают через/v1/modules/{id}/as-entriesCommunity: CRUD работает через/v1/communities- ошибки
problem+jsonкорректно отображаются в UI