Перейти к основному содержимому

Handbook API — реестр операций областей public / internal / admin

Индекс HTTP-операций контекста handbook и общие правила областей: модель акторов, маршрутные схемы, сквозные соглашения (видимость архивных записей, пагинация, кэширование, формат ошибок). Файлы операций разложены по областям-акторам (public/, internal/, admin/) и описывают только свою дельту; дом полей справочных записей — ../domain/, дом snapshot-моделей — ../domain/snapshots.md.

handbook — ACL-реплика внешнего Talent Handbook (ADR-0063): API контекста — только чтение и archive/restore. CRUD справочных данных в PIN нет — записи создаёт и обновляет исключительно синк источника (INV-HND-1, ../domain/country.md).

Metadata

ПолеЗначение
Сервис/контекстhandbook
Статусdraft
Областиpublic (lookup для фронтов, аноним), internal (batch-resolve, m2m), admin (archive/restore записей, состояние синка — администратор платформы)

Ошибки — ProblemDetails с кодом. Ведение (создание/правка) справочных данных — в Talent Handbook, не здесь.

Маршрутные схемы областей

ОбластьПрефикс маршрутовАктор
public/api/v1/handbook/…аноним (гость) — авторизация не требуется
internal/internal/handbook/…m2m service token внутренних сервисов PIN
admin/api/v1/admin/handbook/…администратор платформы через admin API (ADR-0053)

Общие правила областей

Область public (lookup, /api/v1/handbook/…)

ПравилоЗначение
Actor typeAnonymous — справочники нужны гостю до регистрации (фильтры каталога, формы)
Видимостьтолько неархивные записи (INV-HND-5, ../domain/country.md)
Tenant isolationне применяется — справочники платформенные
Кэшированиеответы кэшируемы: Cache-Control: public, max-age=300 — данные меняются редко, устаревание ≤ 5 минут допустимо
Пагинациятолько у городов (page/pageSize, default 50, max 200) — единственный справочник в тысячи строк; остальные выдаются целиком

Область internal (batch-resolve, /internal/handbook/…)

ПравилоЗначение
Actor typeServiceAccount — m2m service token (client-credentials), не user JWT; policy InternalServiceOnly, allowlist потребителей (chessboard, crm, profile, rewards, promotion, investor-owner)
Видимостьвключая архивные (INV-HND-5): исторические ссылки по id не ломаются; решение «допустима ли архивная запись» — за вызывающим
Семантика отсутствиянеизвестный id просто отсутствует в ответе — вызывающий решает, ошибка ли это (и возвращает свой код: CRM_CITY_UNKNOWN, PROFILE_COUNTRY_UNKNOWN, CHESSBOARD_GEO_REF_UNKNOWN и т.п.)
Tenant isolationне применяется

Область admin (/api/v1/admin/handbook/…)

ПравилоЗначение
Actor typeАдминистратор платформы через admin API — отдельная admin-система вне основной Identity (ADR-0053); m2m-токен admin-системы, audience pin.handbook.admin
Permissionhandbook.entries.manage (каталог admin-permissions)
Границытолько archive/restore (ручной tombstone для delete-gap источника, ADR-0063 п.5) и диагностика синка; правка реплика-полей администратору недоступна (INV-HND-1)
Auditобязателен: X-Admin-User-Id (header) — актор каждой команды логируется

Сквозные соглашения областей

СоглашениеПравило
Модели ответовInternal resolve выдаёт snapshot-модели платформы (CountrySnapshot/RegionSnapshot/CitySnapshot/CurrencySnapshot + IsArchived) — единый дом полей ../domain/snapshots.md; public lookup — проекции реплик (дома полей — ../domain/*.md)
Типы idкак у источника (ADR-0063 п.2): страна/валюта/язык — short, регион/город — long; Guid для справочных записей не используется
Идемпотентностьвсе операции безопасны для повтора: чтения — по природе; archive/restore — повторный вызов — no-op 200
Событийные эффектыarchive/restore re-publish-ит {x}-upserted в соответствующий compacted-топик pin.handbook.*.v1 (только при фактическом изменении состояния)
Валидациянарушение формата/диапазонов параметров → VALIDATION_FAILED (400); точечное обращение к несуществующей записи → HANDBOOK_ENTRY_NOT_FOUND (404)

Реестр операций — область public

Пять GET-операций консолидированы в одном документе (единая форма read-only lookup).

#ОперацияHTTPRouteДокумент
1listCountriesGET/api/v1/handbook/countrieslookup-references.md
2listRegionsGET/api/v1/handbook/regions?countryId=lookup-references.md
3listCitiesGET/api/v1/handbook/cities?countryId=&regionId=&search=&page=&pageSize=lookup-references.md
4listCurrenciesGET/api/v1/handbook/currencieslookup-references.md
5listLanguagesGET/api/v1/handbook/languageslookup-references.md

Реестр операций — область internal

#ОперацияHTTPRouteДокумент
6resolveReferencesPOST/internal/handbook/resolveresolve-references.md

Реестр операций — область admin

#ОперацияHTTPRouteДокумент
7archiveEntryPOST/api/v1/admin/handbook/{type}/{id}/archivearchive-restore-entry.md
8restoreEntryPOST/api/v1/admin/handbook/{type}/{id}/restorearchive-restore-entry.md
9getSyncStateGET/api/v1/admin/handbook/sync-state?aggregateType=&status=get-sync-state.md

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