MapSurfer — rest — dictionary
Справочники
Список справочников
Доступно только для пользователей с правами администратора
GET /dictionary/icons
Структура запроса:
GET /dictionary/icons?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 99,
"name": "red",
"width": 73,
"ownerOrganizationId": null,
"height": 72
},...]
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список редактируемых справочников
Доступно только для пользователей с правами администратора
GET /dictionary/icons/editable
Структура запроса:
GET /dictionary/icons/editable?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 99,
"name": "red",
"width": 73,
"ownerOrganizationId": null,
"height": 72
},...]
// id справочника, целое число
// название справочника, строка
// ширина, целое число
// id организации, пользователь которой добавил справочник
// высота, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Создание справочника
Доступно только для пользователей с правами администратора
POST /dictionary/icons
Структура запроса:
POST /dictionary/icons?token=mbs90lon2a8
token: ключ доступа
Пример запроса:
Формат: json
{
"name": "Справочник",
"uuid": "p1996qif28t071sb22us1hd93lon.png"
}
// название справочника, строка
// uuid изображения, строка
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 51,
"name": "Справочник",
"width": 1258,
"height": 750
}
// id справочника, целое число
// название справочника, строка
// ширина, целое число
// высота, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Изменение справочника
Доступно только для пользователей с правами администратора
PUT /dictionary/icons/{id}
Структура запроса:
PUT /dictionary/icons/51?token=mbs90lon2a8
id: id справочника
token: ключ доступа
Пример запроса:
Формат: json
{
"id": 51,
"name": "Новое название справочника",
"uuid": "p1996qif28t071sb22us1hd93lon.png"
}
// id справочника, целое число
// название справочника, строка
// uuid изображения, строка
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 51,
"name": "Новое название справочника",
"width": 1258,
"height": 750
}
// id справочника, целое число
// название справочника, строка
// ширина, целое число
// высота, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление справочника
Доступно только для пользователей с правами администратора
DELETE /dictionary/icons/{id}
Структура запроса:
DELETE /dictionary/icons/51?token=mbs90lon2a88
id: id справочника
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"delete": true
}
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Просмотр справочников
GET /dictionary/icons/{id}/view
Структура запроса:
GET /dictionary/icons/23/view?token=mbs90lon2a8
id: id справочника
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: image/jpeg и т.д.
Изображение выбранного справочника
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
MapSurfer — rest — datastore
Хранилища
Список хранилищ
Доступно только для пользователей с правами администратора
GET /datastores
Структура запроса:
GET /datastores?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 1,
"name": "Datastore",
"host": "192.168.63.36",
"port": 5432,
"database": "data",
"login": "login",
"isInfrastructure": true,
"schemaName": "data"
},...]
// id хранилища, целое число
// название хранилища, строка
// хост, строка
// порт, целое число
// база данных, строка
// логин, строка
// из инфраструктуры, булевое поле
// название схемы, с которой работает хранилище, строка
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Создание хранилища
Доступно только для пользователей с правами администратора
POST /datastores
Структура запроса:
POST /datastores?token=mbs90lon2a8
token: ключ доступа
Пример запроса:
Формат: json
{
"name": "Datastore",
"host": "192.168.63.36",
"port": 5432,
"database": "data",
"login": "login",
"isInfrastructure": true,
"schemaName": "data"
}
// название хранилища, строка
// хост, строка
// порт, целое число
// база данных, строка
// логин, строка
// из инфраструктуры, булевое поле
// название схемы, с которой работает хранилище, строка
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 25,
"name": "Datastore",
"host": "192.168.63.36",
"port": 5432,
"database": "data",
"login": "login",
"isInfrastructure": true,
"schemaName": "data"
}
// id хранилища, целое число
// название хранилища, строка
// хост, строка
// порт, целое число
// база данных, строка
// логин, строка
// из инфраструктуры, булевое поле
// название схемы, с которой работает хранилище, строка
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Изменение хранилища
Доступно только для пользователей с правами администратора
PUT /datastores/{id}
Структура запроса:
PUT /datastores/64?token=mbs90lon2a8
id: id хранилища
token: ключ доступа
Пример запроса:
Формат: json
{
"id": 64,
"name": "Datastore",
"host": "192.164.63.32",
"port": 5874,
"database": "data",
"login": "login",
"password": "654321",
"isInfrastructure": true,
"schemaName": "data"
}
// id хранилища, целое число
// название хранилища, строка
// хост, строка
// порт, целое число
// база данных, строка
// логин, строка
// пароль, строка
// из инфраструктуры, булевое поле
// название схемы, с которой работает хранилище, строка
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 64,
"name": "Datastore",
"host": "192.164.63.32",
"port": 5874,
"database": "data",
"login": "login",
"isInfrastructure": true,
"schemaName": "data"
}
// id хранилища, целое число
// название хранилища, строка
// хост, строка
// порт, целое число
// база данных, строка
// логин, строка
// из инфраструктуры, булевое поле
// название схемы, с которой работает хранилище, строка
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление хранилища
Доступно только для пользователей с правами администратора
DELETE /datastores/{id}
Структура запроса:
DELETE /datastores/64?token=mbs90lon2a8
id: id хранилища
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"delete": true
}
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Экспорт хранилищ
Доступно только для пользователей с правами администратора
GET /datastores.xlsx
Структура запроса:
GET /datastores.xlsx?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
Возвращает бинарный файл
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Проекции хранилищ
Доступно только для пользователей с правами администратора
GET /datastores/projections
Структура запроса:
GET /datastores/projections?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
[{
"projection": "EPSG:3819"
},...]
// проекция
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Проекции хранилища
Доступно только для пользователей с правами администратора
GET /datastores/{id}/projections
Структура запроса:
GET /datastores/42/projections?token=mbs90lon2a8
id: id хранилища
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
[{
"projection": "EPSG:3819"
},...]
// проекция
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Таблицы хранилища
Доступно только для пользователей с правами администратора
GET /datastores/{id}/tables
Структура запроса:
GET /datastores/42/tables?token=mbs90lon2a8
id: id хранилища
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
[{
"datastoreId": 42,
"tableId": 0,
"layerId": null,
"nameDb": "departments_news_points",
"geometryType": "POINT"
},...]
// id хранилища, целое число
// id таблицы, целое число
// id слоя, целое число
// название базы данных, строка
// тип геометрии, строка
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Информация о таблице хранилища
Доступно только для пользователей с правами администратора
GET /datastores/{id}/tables/{tablename}
Структура запроса:
GET /datastores/42/tables/test_table?token=mbs90lon2a8
id: id хранилища
tablename: название таблицы
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
{
"geometryType": "multilinestring",
"name": "test_table",
"title": "Тестовая таблица",
"style": {
"styleName": null,
"geoCss": "* {\n stroke-dashoffset: 0;\n}",
"base": false,
"simple": false
},
"dataStoreId": 22,
"attributes": [{
"name": "attribute",
"rusName": "Атрибут",
"type": null,
"isTitle": null,
"title": null,
"isView": true,
"view": true,
"order": null
},...]
}
// тип геометрии, строка
// название таблицы, строка
// русское название таблицы, строка
// стили, объект
// название стиля, строка
// geocss стиль, строка
// базовый, булевое поле
// простой, булевое поле
// id хранилища, целое число
// атрибуты таблицы, массив
// название атрибута, строка
// русское название атрибута, строка
// тип, строка
// является заголовком, булевое поле
// заголовок, строка
// доступен к просмотру, булевое боле
// просмотр, булевое поле
// порядковый номер, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Automap — rest — ways
Маршруты
Список маршрутов
GET /ways
Структура запроса:
GET /ways?token=gtr543lpas87
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 805,
"geom": {
"type": "LineString",
"coordinates":
[[48.38378906,54.0916173],
[49.9822998,54.27163997]]
},
"name": "Название маршрута",
"color": "ff0000",
"active": true,
"organizationId": 102,
"coordinates":
[[48.38378906,54.0916173],
[49.9822998,54.27163997]]
},…]
// id маршрута, целое число
// информация о типе геометрии, объект
// тип геометрии, строка
// координаты, массив
// название маршрута, строка
// цвет маршрута, строка
// id организации, целое число
// координаты, массив
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Добавление маршрута
POST /ways
Структура запроса:
POST /ways?token=gtr543lpas87
token: ключ доступа
Пример запроса:
Формат: json
{
"color": "ff9900",
"geom": {
"coordinates": [[48.54789733886719,
56.8433391974011],
[48.830108642578125, 56.85873346253295]],
"type": "LineString"
},
"name": "Маршрут",
"organizationId": 1
}
// цвет, строка
// информация о геометрии, объект
// координаты, массив
// тип, строка
// название маршрута, строка
// id организации, целое число
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 2101,
"geom": {
"type": "LineString",
"coordinates": [[48.54789734,
56.8433392]]
},
"name": "Маршрут",
"color": "ff9900",
"active": true,
"organizationId": 1,
"coordinates": [[48.54789733886719,
56.8433391974011]]
}
// id маршрута, целое число
// информация о типе геометрии, объект
// тип геометрии, строка
// координаты, массив
// название маршрута, строка
// цвет маршрута, строка
// id организации, целое число
// координаты, массив
Статус: 400 — ошибка в запросе
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Информация о маршруте по ID
GET /ways/{id}
Структура запроса:
GET /ways/805?token=gtr543lpas87
id: id маршрута
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 805,
"geom": {
"type": "LineString",
"coordinates":
[[48.38378906,54.0916173],
[49.9822998,54.27163997]]
},
"name": "Название маршрута",
"color": "ff0000",
"active": true,
"organizationId": 102,
"coordinates":
[[48.38378906,54.0916173],
[49.9822998,54.27163997]]
},...]
// id маршрута, целое число
// информация о типе геометрии
// тип геометрии, строка
// координаты, массив
// название маршрута, строка
// цвет маршрута, строка
// id организации, целое число
// координаты, массив
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Редактирование маршрута
PUT /ways/{id}
Структура запроса:
PUT /ways/806?token=gtr543lpas87
id: id маршрута
token: ключ доступа
Пример запроса:
Формат: json
{
"color": "000dff",
"geom": {
"coordinates": [[48.75663757,
56.8645516],
[48.7147522,
56.81873278]],
"type": "LineString"
},
"name": "Новое название",
"organizationId": 242
}
// цвет, строка
// информация о геометрии
// координаты
// тип, строка
// название маршрута, строка
// id организации, целое число
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 806,
"geom": {
"type": "LineString",
"coordinates": [[48.75663757,56.8645516],
[48.7147522,56.81873278]]
},
"name": "Новое название",
"color": "000dff",
"active": true,
"organizationId": 242,
"coordinates": [[48.75663757,56.8645516],
[48.7147522,56.81873278]]
}
// id маршрута, целое число
// информация о типе геометрии, объект
// тип геометрии, строка
// координаты, массив
// название маршрута, строка
// цвет маршрута, строка
// id организации, целое число
// координаты, массив
Статус: 400 — ошибка в запросе
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление маршрута
DELETE /ways/{id}
Структура запроса:
DELETE /ways/806?token=bw3ty3h46yth
id: id маршрута
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
REST API Сервис построения маршрутов
API сервиса построения маршрутов router.geo4.me
Определение местоположения
Данный сервис необходим для определения местоположения ближайшей точки дорожной сети к указанной координате.
Ближайшая точка определяется при отправке запроса следующего формата:
GET/locate?loc=lat,lon
Структура запроса:
GET/locate?loc=52.4224,13.333086
lat: широта
lon: долгота
Ответ:
{
"mapped_coordinate": [52.42244, 13.332101],
"status": 0
}
// координаты на карте
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута
Ближайшая точка
Данный сервис позволяет определить ближайшую точку на некотором участке улицы дорожной сети к указанной координате.
Ближайшая точка определяется при отправке запроса следующего формата:
GET/nearest?loc=lat,lon
Структура запроса:
GET/nearest?loc=52.4224,13.333086
lat: широта
lon: долгота
Ответ:
{
"name": "Mariannenstraße",
"mapped_coordinate": [52.422592, 13.333837],
"status": 0
}
// название улицы
// координаты на карте
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута
При использовании вышеупомянутого синтаксиса ответ приходит в формате JSON, который может быть дополнительно обработан многими языками программирования. При этом на выходе данные могут быть отформатированы как JSONP:
GET/nearest?52.555485441735&13.342227642887&jsonp=function
Запрос возвращает результат в формате JSON, обёрнутый функцией (), которая может быть легко переработана при помощи JavaScript:
function({"status":0,"result":[52.55567, 13.34252]"})
Построение маршрута
Данный сервис позволяет построить кратчайший маршрут через указанные координаты с учетом порядка следования координат. Основные точки между координатами (lat1, lon1) и (lat2, lon2) запрашиваются следующим образом:
GET/viaroute?loc=lat1,lon1&loc=lat2,lon2
Структура запроса:
GET/viaroute?loc= 55.7887400, 49.1221400&loc= 55.8437600, 48.5178400
lat: широта
lon: долгота
Чтобы построить маршрут через определенные координаты, перечислите их в запросе string в порядке своего появления (на текущий момент стоит максимальное ограничение в 25 точек).
При построении маршрута появляется параметр hint_data, который дает (кодированную) достоверную информацию о начальных и конечных точках. При этом при реализации API предполагается следующее:
- добавление &checksum=… в URL, где ‘…’ – это контрольная сумма в hint_data.checksum из предыдущего запроса.
- добавление &hint=… после каждого &loc=… параметра, если он не меняется по сравнению с предыдущим запросом.
- в случае, если координаты были изменены, то они не дают никакой «подсказки» для указанной координаты.
- «подсказки» должны быть размещены непосредственно после параметра &loc=…
Ответ:
{
"hint_data": {
"locations": ["1","2"],
"checksum": 3637997664
},
"route_name": ["1","2"],
"found_alternative": false,
"via_points": [[55.788872,49.121826],
[55.843784,48.517399]],
"route_summary": {
"end_point": "",
"start_point": "Университетская улица",
"total_time": 3128,
"total_distance": 42557
},
"route_geometry": "",
"status_message": "Found route between points",
"via_indices": [0, 362],
"status": 0
}
// информация о «подсказывающих» данных
// местоположение
// контрольная сумма
// массив строк, который хранит наименования маршрутов
// поиск альтернатив
// массив точек, в котором каждая точка представляет собой массив координат: [lat, lon]
// общие сведения о маршруте
// конечная точка
// начальная точка
// общее время пути в секундах
// общая длина в метрах
// геометрия маршрута
// сообщение о статусе (находит маршрут между точками или нет)
// целочисленный массив, который содержит положение начальных и конечных путевых точек
// статус: 0 – успешное выполнение запроса, 207 – нет маршрута
Таблица расстояний по дорожной сети
Запрос по таблицам расстояний аналогичен запросу по маршруту. Схема запроса по таблице расстояний выглядит следующим образом:
GET/table?loc=lat1,lon1&loc=lat2,lon2&…loc=latX,lonX
Структура запроса:
GET/table?loc=52.554070,13.160621&loc=52.431272,13.720654&loc=52.554070,13.720654&loc=52.554070, 13.160621&z=14
lat: широта
lon: долгота
Ответ:
{
"distance_table": [
[0, 26084, 22942, 26989],
[26319, 0, 30810, 19607],
[22782, 30482, 0, 37495],
[27376, 19415, 37693, 0]
]
}
Параметры
В запрос может быть добавлен ряд дополнительных параметров:
Название параметров | Описание параметров |
&z={0,…,18} | Определяет уровень масштабирования и упрощает геометрию маршрута (то есть на сколько точной будет возвращаемая геометрия маршрута). |
output={json, gpx} | Форматирует выходные данные как JSON или GPX. |
&jsonp=_function_ | Форматирует выходные данные как JSONP, обернутые функцией. |
&instructions={true, false} | Возвращает инструкции для каждого маршрута в виде массива.
|
&alt={true, false} | Возвращает альтернативный маршрут при его наличии. |
Automap — rest — events
События ТС
Получение всех событий
GET /events/last
Структура запроса:
GET /events/last?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 29041304,
"dataFrom": 1389361046000,
"dataTill": 1389361188000,
"info": " ",
"data": "6547",
"gaugeInfo": null,
"gaugeId": null,
"glonassId": 42117,
"carId": 111447,
"eventId": 1,
"notifiable": true,
"carNo": "С001СЕ",
"carName": "CHEVROLET"
},...]
// id события, целое число
// время начала действия события, timestamp
// время конца действия события, timestamp
// информация о событии, строка
// данные, строка
// информация о датчике, строка
// id датчика, целое число
// id ГЛОНАСС, целое число
// id ТС, целое число
// id события, целое число
// посылает оповещения, булевое поле
// номер ТС, строка
// название ТС, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Получение события по ID
GET /events/{id}
Структура запроса:
GET /events/29041304?token=bw3ty3h46yth
id: id события
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 29041304,
"dataFrom": 1389361046000,
"dataTill": 1389361188000,
"lat": 55.7876,
"lon": 49.1406,
"description": "Остановка (00:02:22)"
}
// id события, целое число
// время начала действия события, timestamp
// время конца действия события, timestamp
// широта, число с плавающей точкой
// долгота, число с плавающей точкой
// описание события, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Получение новых событий
Для подписки на обновление информации о событиях конкретных ТС необходимо отправить WebSocket-сообщение «SET_OBSERVABLE_CARS», содержащее массив glonassID данных ТС. Новые события приходят в сообщении вебсокета с заголовком EVENT_UPDATES.
Структура запроса:
Формат: json
{
"command": "SET_OBSERVABLE_CARS",
"data": [3333,107285,107305,107328]
}
// заголовок сообщения, строка
// glonassId ТС, на которые подписываемся
Ответ:
Формат: json
{
"command": "EVENT_UPDATES",
"data": [
{
"carId": 1869,
"carName": "ПАЗ-115",
"carNo": "ВН115 16 RUS",
"dataFrom": 1390224122000,
"dataTill": 1390226705000,
"eventId": 1,
"gaugeInfo": null,
"glonassId": 223789,
"id": 44672821,
"info": ""
}
]
}
// заголовок сообщения, строка
// id ТС, целое число
// название ТС, строка
// номер ТС, строка
// начало действия события, timestamp
// конец действия события, timestamp
// тип события(см. ниже), целое число
// информация о датчике, строка
// ГЛОНАСС id, целое число
// id события, целое число
// если событие датчика, то тип датчика, строка
Типы событий
GET /events/types
Структура запроса:
GET /events/types?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Формат: json
[{
"id": 1,
"name": "parking",
"defaultMessage": "ТС car.carInfo.carNo остановилось в date",
"title": "Остановка",
"iconList": "/assets/images/icons/parking.png",
"iconMap": "/assets/images/markers/parking.png",
"view": true,
"isModul": false,
"notifiable": true
},...]
// id типа события, целое число
// название события, строка
// сообщение по умолчанию, строка
// заголовок, строка
// иконка списка, строка
// иконка карты, строка
// является видимым, булевое поле
// является модулем, булевое поле
// посылает оповещения, булевое поле
Типы событий:
1 — остановка
2 — потеря сигнала
3 — поворот
4 — поломка оборудования
5 — смена скоростного режима
6 — вход в геозону
7 — выход из геозоны
8 — событие цифрового датчика (если тип датчика 32, то событие 8 — это зажигание)
9 — событие аналогового датчика
10 — заправка топлива
11 — слив топлива
12 — зажигание сработало без назначенного водителя
13 — прибыл в контрольную точку
14 — прибыл к месту заявки
15 — зажигание
16 — выход на маршрут
17 — уход с маршрута
18 — задание назначено
19 — задание выполнено
20 — задание просрочено
21 — задание отменено водителем
22 — задание принято водителем
23 — задание отменено диспетчером
24 — ТС ушло с маршрута
25 — долгая остановка ТС на маршруте
Automap — rest — log — app
Журнал приложения
Логи приложения
GET /log/app
Структура запроса:
GET /log/app?token=bw3ty3h46yth
token: ключ доступа
Параметры фильтрации
GET /log/app?level=3
message: поиск логов по сообщению
logger: поиск логов по источнику логов приложения
thread: поиск логов по потокам логов приложения
level: получение списка логов по id уровня ошибки
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: "52bd1f69e4b0f5cc9d5de9b3",
time: 1388126057286,
message: "refresh inmemory car storage at Fri Dec 27",
level: "NOTICE",
logger: "application",
thread: "application-akka.actor.default-d-11334",
}
]
// массив логов
// id лога
// время
// сообщение
// уровень
// источник логов приложения
// поток логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество логов приложения
GET /log/app/count
Структура запроса:
GET /log/app/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
4303
// количество логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Источники логов
GET /log/app/loggers
Структура запроса:
GET /log/app/loggers?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
value: "application"
}
]
// массив источников логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество источников логов
GET /log/app/loggers/count
Структура запроса:
GET /log/app/loggers/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
8
// количество источников логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Потоки логов
GET /log/app/threads
Структура запроса:
GET /log/app/threads?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
value: "application-akka.actor.default-dispatcher-15756"
}
]
// массив потоков логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество потоков логов приложения
GET /log/app/threads/count
Структура запроса:
GET /log/app/threads/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
145
// количество потоков логов приложения
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список уровней ошибок
GET /log/app/levels
Структура запроса:
GET /log/app/levels?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: 1,
type: "ALERT"
}
]
// массив уровней ошибок
// id уровня ошибки
// тип уровня ошибки
Статус: 404 — Объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Automap — rest — log — daemon
Журнал демона
Логи демона
GET /log/daemon
Структура запроса:
GET /log/daemon?token=bw3ty3h46yth
token: ключ доступа
Параметры фильтрации
GET /log/daemon?level=3
level: получение списка логов по id уровня ошибки
objectType: поиск логов по типу источника данных
protocolName: поиск логов по названию протокола
protocolId: поиск логов по ID протокола
glonassId: поиск логов по glonass ID
message: поиск логов по сообщению
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: "5282255f5cc7d2819e1b9706",
time: 1384260959484,
level: "ERROR",
objectId: 0,
objectType: "pgdatabase",
protocolId: 0,
glonassId: 0,
message: " db: database connection error"
}
]
// Массив логов демона
// id лога
// время лога
// уровень лога
// id источника данных для лога
// тип источника данных для лога
// id протокола
// glonass ID
// сообщение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество логов демона
GET /log/daemon/count
Структура запроса:
GET /log/daemon/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
144
// Количество логов демона
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список уровней ошибок
GET /log/daemon/levels
Структура запроса:
GET /log/daemon/levels?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: 1,
type: "EMERGENCY"
}
]
// Список уровней ошибок
// id уровня
// тип уровня
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Automap — rest — icons(before delete /all)
Иконки
Список иконок
GET /cars/icons
Структура запроса:
GET /cars/icons?token=bw3ty3h46yth
token: ключ доступа
Параметры фильтрации:
GET /cars/icons?name=iconName&rotate=true
name: получение списка иконок по названию
rotate: получение списка иконок, у которых состояние поворота соответствует заданному булевому значению
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
id: 1,
name: "Автобус 3D",
width: 384,
height: 48,
initialRotation: 0,
rotate: true,
type: 1,
src0: "/cars/icons/222/0",
src1: "/cars/icons/222/1",
src2: "/cars/icons/222/2"
},...]
// id иконки, целое число
// название иконки, строка
// ширина, целое число
// высота, целое число
// первоначальный поворот, целое число
// вращается, булевое поле
// тип иконки, целое число
// иконка неактивного ТС, строка
// иконка активного ТС, строка
// иконка выделенного ТС, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список иконок (с ускоренной загрузкой за счет отсутствия фильтрации)
GET /cars/icons/all
Структура запроса:
GET /cars/icons/all?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
id: 222,
name: "Автобус 3D",
width: 384,
height: 48,
initialRotation: 0,
rotate: true,
type: 1,
src0: "/cars/icons/222/0",
src1: "/cars/icons/222/1",
src2: "/cars/icons/222/2"
},...]
// id иконки, целое число
// название иконки, строка
// ширина, целое число
// высота, целое число
// первоначальный поворот, целое число
// вращается, булевое поле
// тип иконки, целое число
// иконка неактивного ТС, строка
// иконка активного ТС, строка
// иконка выделенного ТС, строка
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Получение иконки
GET /cars/icons/{id}/{type}
Структура запроса:
GET /cars/icons/24/1?token=bw3ty3h46yth
id: id иконки
type: тип иконки
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Добавление иконки ТС
Доступно только для пользователей с правами администратора
POST /cars/icons
Структура запроса:
POST /cars/icons?token=bw3ty3h46yth
Пример запроса:
{
"initialRotation": 25,
"name": "Новая иконка",
"rotate": true,
"type": 0,
"src0": "p19qst4j73p1a187q18np13tkqksn.jpg",
"src1": "p19qst4lmt1iau1g0212lf1r3icchp.jpg",
"src2": "p19qst4np91s0hcg71aoeoe7174gr.jpg"
}
// угол поворота, целое число
// название иконки, строка
// вращается, булевое поле
// тип, целое число
// иконка в неактивном состоянии, строка
// иконка в активном состоянии, строка
// иконка в выделенном состоянии, строка
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 185,
"name": "Новая иконка",
"width": 30,
"height": 22,
"initialRotation": 25,
"rotate": true,
"type": 0,
"src0": "/cars/icons/185/0",
"src1": "/cars/icons/185/1",
"src2": "/cars/icons/185/2"
}
// id иконки, целое число
// название иконки, строка
// ширина, целое число
// высота, целое число
// угол поворота, целое число
// вращается, булевое поле
// тип иконки, целое число
// иконка в неактивном состоянии, строка
// иконка в активном состоянии, строка
// иконка в выделенном состоянии, строка
Статус: 400 — ошибка в запросе
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Изменение иконки ТС
Доступно только для пользователей с правами администратора
PUT /cars/icons/{id}
Структура запроса:
PUT /cars/icons/185?token=bw3ty3h46yth
id: id иконки
token: ключ доступа
Формат: json
{
"id": 185,
"height": 22,
"initialRotation": 15,
"name": "Новое название",
"rotate": false,
"src0": null,
"src1": null,
"src2": null,
"type": 0,
"width": 30
}
// id иконки, целое число
// высота, целое число
// угол поворота, целое число
// название иконки, строка
// вращается, булевое поле
// иконка в неактивном состоянии, строка
// иконка в активном состоянии, строка
// иконка в выделенном состоянии, строка
// тип иконки, целое число
// ширина иконки, целое число
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 185,
"name": "Новое название",
"width": 30,
"height": 22,
"initialRotation": 15,
"rotate": false,
"type": 0,
"src0": "/cars/icons/185/0",
"src1": "/cars/icons/185/1",
"src2": "/cars/icons/185/2"
}
// id иконки, целое число
// название иконки, строка
// ширина, целое число
// высота, целое число
// угол поворота, целое число
// вращается, булевое поле
// тип, целое число
// src иконки в неактивном состоянии, строка
// src иконки в активном состоянии, строка
// src иконки в выделенном состоянии, строка
Статус: 400 — ошибка в запросе
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление иконки
Доступно только для пользователей с правами администратора
DELETE /cars/icons/{id}
Структура запроса:
DELETE /cars/icons/24?token=bw3ty3h46yth
id: id иконки
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество иконок
GET /cars/icons/count
Структура запроса:
GET /cars/icons/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: text
24
// Количество иконок
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Предпоказ иконки
GET /cars/icons/{id}/{status}/preview/
Структура запроса:
GET /cars/icons/31/0/preview?token=bw3ty3h46yth
id: id иконки
status: 0 — неактивное ТС; 1 — активное ТС; 2 — выделенное ТС
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: image/png
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Предпоказ только что загруженной иконки
GET /cars/icons/{src}/{type}/preview
Структура запроса:
GET /cars/icons/p19qst4j73p1a187q18np13tkqksn.jpg/0/preview?token=bw3ty3h46yth
src: src загруженной иконки
type: 0 — сжатая иконка; 1 — первая из восьми частей, в несжатом виде
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: image/png
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Automap — rest — users( before delete /all)
Пользователи
Список пользователей
Доступно только для пользователей с правами администратора
GET /users
Структура запроса:
GET /users?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[{
"id": 1,
"login": "user_login",
"fio": "ФИО пользователя",
"email": "user@user.com",
"phone": "5699654",
"monitor": false,
"visible": false,
"enabled": true,
"groupId": 4,
"organizationId": 10
},...]
// id пользователя, целое число
// логин пользователя, строка
// имя пользователя, строка
// электронная почта, строка
// телефон, строка
// видим на старте, булевое поле
// id группы, целое число
// id организации, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Добавление пользователя
Доступно только для пользователей с правами администратора
POST /users
Структура запроса:
POST /users?token=mbs90lon2a8
token: ключ доступа
Пример запроса:
Формат: json
{
"email": "user@user.com",
"fio": "ФИО пользователя",
"groupId": "103",
"login": "newuser",
"organizationId": "122",
"password": "newuser",
"phone": "+79655141423",
"visible": true
}
// электронная почта, строка
// имя пользователя, строка
// id группы, целое число
// логин, строка
// id организации, целое число
// пароль, строка
// телефон, строка
// видим на старте, булевое поле
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 264,
"login": "newuser",
"fio": "ФИО пользователя",
"email": "user@user.com",
"phone": "+79655141423",
"monitor": false,
"visible": true,
"enabled": true,
"groupId": 103,
"organizationId": 122
}
// id пользователя, целое число
// логин, строка
// имя пользователя, строка
// электронная почта, строка
// телефон, строка
// видим на старте, булевое поле
// id группы, целое число
// id организации, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Редактирование пользователя
Доступно только для пользователей с правами администратора
PUT /users/{id}
Структура запроса:
PUT /users/24?token=mbs90lon2a8
id: id пользователя
token: ключ доступа
Пример запроса:
Формат: json
{
"email": "user@user.com",
"enabled": true,
"fio": "ФИО пользователя",
"groupId": "133",
"id": 24,
"login": "newuser",
"monitor": false,
"organizationId": "37",
"password": "newuser",
"phone": "+79655141423",
"visible": true
}
// электронная почта, строка
// видим на старте, булевое поле
// имя пользователя, строка
// id группы, целое число
// id пользователя, целое число
// логин, строка
// id организации, целое число
// пароль, строка
// телефон, строка
// видим на старте, булевое поле
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 24,
"login": "newuser",
"fio": "ФИО пользователя",
"email": "user@user.com",
"phone": "+79655141423",
"monitor": false,
"visible": true,
"enabled": true,
"groupId": 1383,
"organizationId": 3791
}
// id пользователя, целое число
// логин, строка
// имя пользователя, строка
// электронная почта, строка
// телефон, строка
// видим на старте, булевое поле
// id группы, целое число
// id организации, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление пользователя
Доступно только для пользователей с правами администратора
DELETE /users/{id}
Структура запроса:
DELETE /users/24?token=mbs90lon2a8
id: id пользователя
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"delete": true
}
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Экспорт пользователей
Доступно только для пользователей с правами администратора
GET /users.xlsx
Структура запроса:
GET /users.xlsx?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
Возвращает бинарный файл
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Текущий пользователь
Доступно только для пользователей с правами администратора
GET /users/current
Структура запроса:
GET /users/current?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 1,
"login": "admin",
"fio": "admin",
"email": null,
"organization": {
"id": 1,
"name": "ГрадоСервис ООО",
"mapExtent": "57.008, 56.638, 49.262, 48.578",
"mapRoadProvider": "MAPKZN",
"mapAerialProvider": "MICROSOFT_AERIAL",
"toDelete": false,
"info": {
"orgId": 1,
"address": "казань",
"phone": "",
"inn": "",
"kpp": "",
"email": "",
"homepage": ""
}
},
"right": {
"id": 1,
"name": "Градосервис",
"wheel": true,
"admin": true,
"organization": {
"id": 1,
"name": "ГрадоСервис ООО",
"mapExtent": "57.008, 56.638, 49.262, 48.578",
"mapRoadProvider": "MAPKZN",
"mapAerialProvider": "MICROSOFT_AERIAL",
"toDelete": false,
"info": {
"orgId": 1,
"address": "казань",
"phone": "",
"inn": "",
"kpp": "",
"email": "",
"homepage": ""
}
},
"usersCount": 5
},
"phone": "",
"monitor": false,
"visible": false,
"enabled": true,
"groupId": 1,
"organizationId": 1,
"currentOrgId": 0
}
// id пользователя, целое число
// логин пользователя, строка
// имя пользователя, строка
// электронная почта, строка
// информация об организации
// id организации, целое число
// название организации, строка
// положение на карте, строка
// провайдер, строка
// провайдер, строка
// информация о пользователе
// id организации, целое число
// адрес организации, строка
// телефон, строка
// ИНН, целое число
// КПП, целое число
// электронный адрес, строка
// веб-страница, строка
// права пользователя
// id права, целое число
// название права, строка
// всевидящий пользователь, булевое поле
// администратор, булевое поле
// информация об организации
// id организации, целое число
// название, строка
// положение на карте, строка
// провайдер, строка
// провайдер, строка
// удаление, булевое поле
// дополнительная информация
// id организации, целое число
// адрес, строка
// телефон, строка
// ИНН, целое число
// КПП, целое число
// электронная почта, строка
// веб-страница, строка
// число пользователей, целое число
// телефон пользователя, строка
// видим на старте, булевое поле
// id группы, целое число
// id организации, целое число
// id текущей организации, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество пользователей
Доступно только для пользователей с правами администратора
GET /users/count
Структура запроса:
GET /users/count?token=mbs90lon2a8
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
233
// количество пользователей, целое число
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Automap — rest — drivers (before delete /all)
Водители
Список водителей ТС
GET /drivers
Структура запроса:
GET /drivers?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
"id": 982,
"fio": "+",
"phone": "",
"notes": "",
"hasPhoto": false,
"orgId": 1162
}
]
// массив объектов водителей
// id водителя
// фио
// телефон
// примечание
// у водителя имеется фото
// id организации
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список водителей ТС (с более быстрой загрузкой, без фильтрации)
GET /drivers/all
Структура запроса:
GET /drivers/all?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
"id": 982,
"fio": "+",
"phone": "",
"notes": "",
"hasPhoto": false,
"orgId": 1162
}
]
// массив объектов водителей
// id водителя
// фио
// телефон
// примечание
// у водителя имеется фото
// id организации
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Поиск водителя по id
GET /drivers/{id}
Структура запроса:
GET /drivers/982?token=bw3ty3h46yth
id: id водителя
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"id": 982,
"fio": "+",
"phone": "",
"notes": "",
"wire": null,
"extId": null,
"hasPhoto": false,
"orgId": 1162
}
// id водителя
// фио
// телефон
// примечание
// идентификатор ключа
// у водителя имеется фото
// id организации
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Изменение водителя ТС
Доступно только для пользователей с правами администратора
PUT /drivers/{id}
Структура запроса:
PUT /drivers/123?token=bw3ty3h46yth
id: id водителя ТС
token: ключ доступа
Формат: json
{
"fio": "ФИО",
"notes": "Опытный водитель ",
"orgId": 1,
"phone": "12345678"
}
// фио
// примечание
// id организации
// телефон
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"fio": "ФИО",
"hasPhoto": false,
"id": 123,
"notes": "Опытный водитель ",
"orgId": 1,
"phone": "12345678"
}
// фио
// наличие фото
// id водителя
// примечание
// id организации
// телефон
Статус: 400 — ошибка в запросе
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Создание водителя ТС
Доступно только для пользователей с правами администратора
POST /drivers
Структура запроса:
POST /drivers?token=bw3ty3h46yth
token: ключ доступа
Формат: json
{
"fio": "ФИО",
"notes": "Отличный водитель",
"orgId": 1,
"phone": "12345678"
}
// фио
// примечание
// id организации
// телефон
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
"fio": "ФИО",
"hasPhoto": false,
"id": 1101,
"notes": "Отличный водитель",
"orgId": 1,
"phone": "12345678"
}
// фио
// наличие фото
// id водителя
// примечание
// id организации
// телефон
Статус: 400 — ошибка в запросе
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление водителя ТС
Доступно только для пользователей с правами администратора
DELETE /drivers/{id}
Структура запроса:
DELETE /drivers/1125?token=bw3ty3h46yth
id: id водителя ТС
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список водителей в xlsx файле
GET /drivers.xlsx
Структура запроса:
GET /drivers.xlsx?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: application/vnd.ms-excel
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Фотография водителя
GET /drivers/{id}/photo
Структура запроса:
GET /drivers/1123/photo?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: image/png
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки