Files
EvoBGP/docs/api.md
T
Denozordec 3b17228ef2
CI / changes (push) Successful in 7s
CI / openapi (push) Successful in 23s
CI / go (push) Failing after 30s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 1m5s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 1m3s
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
feat: implement peer reconciliation job for BGP peers
Added a new job type `peer_reconcile` to handle fast reconciliation of BGP peers without module ingestion. Updated API documentation to reflect the new job's functionality and its automatic application to speakers post-reconciliation. Enhanced the HTTP API to enqueue reconciliation jobs during peer creation, updates, and deletions, ensuring efficient state management for BGP configurations.
2026-04-09 15:07:21 +07:00

5.6 KiB
Raw Blame History

REST API: обзор и ссылки

Полный контракт запросов и ответов описан в openapi.yaml (OpenAPI 3.1). Этот файл — источник правды. Краткий контекст и ранние таблицы — в evobgp-api-sketches.md (черновик, не заменяет OpenAPI).

Базовый URL и версия

  • Все функциональные маршруты API используют префикс /v1 (например https://api.example.com/v1/modules).
  • Версия сборки: GET /v1/version (публичный маршрут, без Bearer).

Публичные маршруты (без Authorization)

Метод Путь Назначение
GET /v1/health Liveness
GET /v1/ready Readiness (зависимости, например БД)
GET /v1/version Версия / метаданные сборки

Дополнительно на корне сервера (вне /v1):

Метод Путь Назначение
GET /metrics Метрики Prometheus

Все остальные запросы под /v1/..., кроме перечисленных выше трёх GET, проходят через middleware и требуют Authorization: Bearer <api_key> (см. access.md).

Группы маршрутов (соответствие тегам OpenAPI)

Ниже — обзор того, что реализовано в коде (internal/httpapi/routes.go, routes_crud.go). Детали тел, кодов ответов и схем — только в OpenAPI.

Modules

  • GET /v1/modules, GET /v1/modules/{module_id}
  • POST /v1/modules, PATCH /v1/modules/{module_id}, DELETE /v1/modules/{module_id}
  • GET|POST|PATCH|DELETE для .../cdn-sources, .../as-entries, .../domain-entries, .../ip-range-entries
  • POST /v1/modules/{module_id}/refresh

DoH profiles

  • GET|POST /v1/doh-profiles
  • GET|PATCH|DELETE /v1/doh-profiles/{id}

Communities

  • GET|POST /v1/communities
  • GET|PATCH|DELETE /v1/communities/{id}

Peers

  • GET /v1/peers, POST /v1/peers
  • GET|PATCH|DELETE /v1/peers/{id}
  • Для POST|PATCH|DELETE peer запускается быстрый job peer_reconcile (без module ingest/сбора префиксов); после него автоматически ставится apply на спикеры.

Speakers

  • GET /v1/speakers, POST /v1/speakers
  • GET|PATCH /v1/speakers/{speaker_id} (в коде идентификатор в пути — speaker_id; в части маршрутов apply используется {id} — смотрите OpenAPI и реализацию)

Уточнение по коду: для apply на одном спикере зарегистрирован маршрут POST /speakers/{id}/apply внутри v1 mux → POST /v1/speakers/{id}/apply.

Revisions

  • GET /v1/revisions, GET /v1/revisions/{revision_id}
  • GET /v1/revisions/{revision_id}/prefixes
  • GET /v1/revisions/{revision_id}/preview
  • GET /v1/revisions/{revision_a}/diff/{revision_b}
  • POST /v1/revisions/{revision_id}/rollback

Deploy и BIRD

  • POST /v1/apply
  • POST /v1/speakers/{id}/apply
  • POST /v1/bird/reload

Jobs

  • GET /v1/jobs, GET /v1/jobs/{job_id}
  • POST /v1/jobs/{job_id}/cancel

Node (роль node)

  • GET /v1/speakers/{speaker_id}/revisions/latest
  • GET /v1/speakers/{speaker_id}/bundle/{revision_id}
  • POST /v1/nodes/enroll

Settings

  • GET /v1/settings, PATCH /v1/settings

Соглашения из OpenAPI

  • Ошибки в стиле RFC 9457 (application/problem+json): type, title, status, detail, и т.д.
  • Пагинация списков: query-параметры cursor, limit; в ответе часто items, next_cursor, has_more.
  • Заголовок Idempotency-Key для идемпотентных мутаций (рекомендации — в описаниях операций в OpenAPI).
  • Заголовок X-Tenant-Id описан в спецификации для супер-ролей; в текущей реализации Go tenant берётся только из API-ключа, заголовок в обработчиках не переключает контекст (см. access.md).

Как смотреть документацию API

  • Статическая страница Redoc: openapi.html (инструкции для Gitea и пересборки — OPENAPI-GITEA.md).
  • Пересборка после правок YAML (из корня репозитория, PowerShell):
.\scripts\build-openapi-html.ps1

Примеры вызовов

PowerShell, список модулей (подставьте свой токен и URL):

$base = "http://localhost:8080"
$token = "opkey"
$h = @{ Authorization = "Bearer $token" }
Invoke-RestMethod -Uri "$base/v1/modules" -Headers $h

Эквивалент с curl (если установлен):

curl -s -H "Authorization: Bearer opkey" http://localhost:8080/v1/modules

CORS для браузерных клиентов настраивается переменной EVOBGP_CORS_ORIGINS на стороне API.

Связанные документы

  • access.md — ключи и роли.
  • overview.md — продуктовые возможности.