AGENTS.md — api/
Назначение этого уровня
Контракты HTTP API, gRPC и WebSocket. OpenAPI, .proto, AsyncAPI спецификации.
Содержимое
api/
├── AGENTS.md # ← вы здесь
├── public-api.openapi.yaml # REST: клиентский API (источник стартового стаба; CI генерирует из кода)
├── admin-api.openapi.yaml # REST: админский API — AS-SHIPPED, линтуется `backend/cmd/openapilint`
├── admin-api-target.openapi.yaml # REST: админский API — TARGET (aspirational roadmap), не линтуется
├── connector-api.yaml # внутренний контракт ядро ↔ коннекторы (соответствует Go interface)
├── grpc/
│ ├── public_api.proto # public-api gRPC services
│ └── README.md
└── asyncapi/
└── public-ws.yaml # WebSocket subscriptions
admin-api.openapi.yaml — источник истины о реально реализованных admin-endpoints. CI-job backend-openapilint строго сверяет его с mux.HandleFunc регистрациями в core HTTP handlers и platform job-history registrar — любой дрейф роняет пайплайн. Новый endpoint попадает сюда только после того, как появился handler в коде.
admin-api-target.openapi.yaml — целевой контракт, накопленный проектный roadmap (customers, organizations, identity-profiles, enrichment, moderation, plans, suppliers, offers, credentials, relationships, connectors и т.п.). Линтером не проверяется; служит design-reference для будущих BC. При реализации нового endpoint перенесите описание из target в as-shipped и уберите из target.
public-api.openapi.yaml использует servers: .../v1, поэтому path keys внутри файла пишутся без /v1: /products, /search/proposals, /whoami. Внешний URL всё равно /v1/products, /v1/search/proposals, /v1/whoami. Не добавляйте отдельные /v1/... path keys — это создаёт двойной /v1/v1/... в Swagger UI. Auth public API — API token trk_*; JWT-cookie остаётся для cabinet/admin UI. См. ADR-0051.
Остальные OpenAPI/proto/AsyncAPI файлы — стартовые заглушки. После Phase 1 источник истины переходит в код, эти файлы автогенерируются CI-задачей make api-gen. До этого момента — ручная синхронизация при PR на endpoint.
Правила
- Все публичные контракты — в спецификациях, источник истины здесь.
- Изменения — PR с генерацией SDK / клиентов в CI (если применимо).
- Версионирование:
/v1/...,package public.v1для proto, breaking →/v2. - Для public OpenAPI version base path живёт в
servers.url, не в каждом path key. - Для gRPC: соблюдать совместимость (не менять номера полей, не удалять, не переиспользовать).
Когда смотреть сюда
- Добавляете endpoint / RPC / WS subscription.
- Интегрируетесь с нашим API (генерируете client).
Связано
- Реализация public:
../../../30-services/public-api/README.md - Реализация admin:
../../../30-services/admin-api/README.md - ADR-0015 (multi-protocol):
../../adr/0015-multi-protocol-public-api.md - ADR-0051 (public API auth + API-key RBAC):
../../adr/0051-public-api-auth-and-api-key-rbac.md