Публичный API — доступен по префиксу public/ и защищён api-key
X-Api-Key: <ваш-ключ> (схема аутентификации ApiKey).401 Unauthorized.429 Too Many Requests с заголовком Retry-After: 60.public: api/v1/public/....public-api/swagger (группа public).Эндпоинты с постраничной выдачей возвращают заголовок X-Pagination — JSON с метаданными:
{ "CurrentPage": 1, "TotalPages": 5, "PageSize": 100, "TotalCount": 480, "HasPrevious": false, "HasNext": true }
| Поле | Тип | Описание |
|---|---|---|
CurrentPage | int | Текущая страница |
TotalPages | int | Всего страниц |
PageSize | int | Размер страницы |
TotalCount | int | Всего записей |
HasPrevious | bool | Есть предыдущая страница |
HasNext | bool | Есть следующая страница |
Общая последовательность: получить список источников → определить тип и формат слоя → запросить данные соответствующим эндпоинтом.
GET api/v1/public/Config/DataSources → List<DataSourceConfigDto>.
В публичном API значимы только источники с FeatureSourceType = RoadEntity (дорожная сущность) или RoadAccidents (ДТП). Источники других типов потребитель может игнорировать.
Поля DataSourceConfigDto: Id, ProjectId, Name, LayerType, FeatureSourceType, GeometryTypes, AccessType, Reports.
GET api/v1/public/Config/DataSources/count → Dictionary<Guid, DataSourceFeatureCount?> (ключ — dataSourceId). DataSourceFeatureCount: Count (int?) или Error (string?).
GET api/v1/public/Config/FeatureSources/RoadEntity/{dataSourceId} → RoadEntityFeatureSourceConfigDto.
Важны FeatureConfig и FeatureConfig.EntityName. По FeatureConfig известно, как называются поля сущности и по каким полям доступна фильтрация. EntityName используется как {entityName} в маршрутах шага 6.
GET api/v1/public/Config/Layer/{dataSourceId} → LayerConfigDto.
StyleProperties (string[]) — поля, необходимые для отрисовки. При запросе данных достаточно передать только эти поля (через параметр Fields), чтобы уменьшить ответ.StyleConfigs (LayerStyleConfigDto[]): Style — стиль для mapbox (JSON), Order, Name.Legend, ZIndexGroupType, LayerType, LayerSourceType.GET api/v1/public/Config/LayerSources/Backend/{dataSourceId} → BackendLayerSourceConfigDto.
Важно поле Type: Geojson либо Pbf — оно определяет способ получения данных в шаге 6. Значения приходят в PascalCase (перечисление LayerSourceFormatClassifier). Также есть SourceConfig (JSON).
| Источник | Формат (Type) | Эндпоинт |
|---|---|---|
| RoadEntity | Geojson | POST api/v1/public/EntityData/RouteData/{entityName}/All |
| RoadEntity | Pbf | GET api/v1/public/Layer/tile/vector/{entityName}/{dataSourceId}/{z}/{x}/{y}.pbf |
| RoadAccidents | — | POST api/v1/public/RoadAccidents/layer/{dataSourceId} |
POST api/v1/public/EntityData/RouteData/{entityName}/All → PagedList<Dictionary<string, object?>>
X-Pagination.EntityDataParameters): DataSourceId, Fields, IsReverse, PageNumber, PageSize, OrderBy.FilterContainer (см. Фильтрация).{entityName}.FeatureConfig (шаг 3) известно, какие поля возвращаются и по каким доступна фильтрация.routeId — чтобы показать читаемое значение, нужно запросить все дороги, построить словарь id → значение и подставить его на фронте.Векторные тайлы дорожной сущности. Так как структура фильтра может быть очень большой, применяется двухшаговый подход: сначала фильтр регистрируется и возвращает filterId, затем filterId передаётся в запрос тайла.
POST api/v1/public/Layer/filter — тело: массив FilterContainer → filterId (Guid).
GET api/v1/public/Layer/tile/vector/{entityName}/{dataSourceId}/{z}/{x}/{y}.pbf → application/x-protobuf (пустой тайл → 204 No Content).
Query (FeatureQueryControllerDto):
| Параметр | Тип | Описание |
|---|---|---|
FilterId | Guid? | Идентификатор ранее зарегистрированного фильтра |
NotIn | Guid[] | Исключить фичи по Id |
Fields | string | Список полей через запятую (для уменьшения ответа) |
GET api/v1/public/Layer/meta/{entityName}/{dataSourceId}?filterId= → LayerMeta: Count (число фич) и Extent (полигон — охват слоя).
POST api/v1/public/RoadAccidents/layer/{dataSourceId} — тело: FilterAccidentDto → GeoJSON FeatureCollection точек ДТП.
Поля FilterAccidentDto: LightningTypes, RoadTypes, AccidentTypes, UdsTypes (string[]), Time, Geometry (полигон), IsInConcentration.
Дополнительные эндпоинты контроллера (счётчик, короткая выдача, слой концентрации, отдельное ДТП) описаны в Swagger.
Структура FilterContainer (NextFilterLogicOperationType, FilterType, Value), список фильтров, логические операции и правила описаны в Фильтрация.