Запрос к каталогу
http://192.168.70.253:3102/api/qhttp://192.168.70.253:3102/api/qОписание
Каталог обходится по указателям. Первый указатель приходит из /api/vin в поле vehicle.qMainGroup, дальше каждый ответ содержит указатели на следующий уровень: lists[].q, node.qGroup, part.q_partinfo и другие поля, начинающиеся с q.
Метод POST используется, когда в ответе пришли forms: значения полей отправляются на указатель формы тем же запросом, но с телом JSON.
Заголовки запроса
| Заголовок | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
Authorization | string | да | — | Bearer <access_token>. |
Accept-Language | string | нет | ru | Язык названий узлов и деталей: ru, en, de, fr, es, it, pl, tr, ko, zh. |
Content-Type | string | нет | application/json | Обязателен только для POST — когда передаются значения формы. |
Параметры запроса
Передаются в строке запроса и для GET, и для POST.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
q | string | да | Указатель на раздел каталога. Приходит в ответах сервера: vehicle.qMainGroup, lists[].q, node.qGroup, part.q_partinfo и другие поля с префиксом q. |
catalog | string | нет | Идентификатор каталога из ответа /api/vin. Передавайте вместе с q, чтобы запрос выполнялся в нужном каталоге. |
Тело запроса (POST)
Плоский объект: код поля формы — выбранное значение.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
<код поля> | string | number | boolean | нет | Значение поля формы. Ключ — code или id поля из forms[].fields, значение — выбранный вариант. Состав полей задаёт сервер в предыдущем ответе. |
Пример запроса
Переход по указателю:
curl -G 'http://192.168.70.253:3102/api/q' \
--data-urlencode 'q=<указатель из ответа>' \
--data-urlencode 'catalog=lexus' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept-Language: ru'const params = new URLSearchParams({ q, catalog: catalogId })
const response = await fetch('http://192.168.70.253:3102/api/q?' + params, {
headers: {
Authorization: 'Bearer ' + accessToken,
'Accept-Language': 'ru'
}
})
const { result } = await response.json()
if (result.node) {
// карточка узла: схема и детали
} else if (result.lists) {
// список узлов следующего уровня
}import requests
response = requests.get(
'http://192.168.70.253:3102/api/q',
params={'q': q, 'catalog': catalog_id},
headers={
'Authorization': f'Bearer {access_token}',
'Accept-Language': 'ru',
},
timeout=30,
)
response.raise_for_status()
result = response.json()['result']
lists = result.get('lists', [])<?php
$query = http_build_query(['q' => $q, 'catalog' => $catalogId]);
$ch = curl_init('http://192.168.70.253:3102/api/q?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $accessToken,
'Accept-Language: ru',
],
]);
$result = json_decode(curl_exec($ch), true)['result'];
curl_close($ch);Соединение = Новый HTTPСоединение("192.168.70.253", 3102, , , , 30);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Заголовки.Вставить("Accept-Language", "ru");
СтрокаЗапроса = "/api/q?q=" + КодироватьСтроку(Указатель, СпособКодированияСтроки.КодировкаURL)
+ "&catalog=" + КаталогИд;
Запрос = Новый HTTPЗапрос(СтрокаЗапроса, Заголовки);
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(Чтение)["result"];
Чтение.Закрыть();Отправка формы:
curl -X POST 'http://192.168.70.253:3102/api/q?q=<указатель формы>&catalog=lexus' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-H 'Accept-Language: ru' \
-d '{ "engine": "1UZ-FE", "transmission": "AT" }'const params = new URLSearchParams({ q: form.q, catalog: catalogId })
const response = await fetch('http://192.168.70.253:3102/api/q?' + params, {
method: 'POST',
headers: {
Authorization: 'Bearer ' + accessToken,
'Content-Type': 'application/json',
'Accept-Language': 'ru'
},
body: JSON.stringify({ engine: '1UZ-FE', transmission: 'AT' })
})
const { result } = await response.json()import requests
response = requests.post(
'http://192.168.70.253:3102/api/q',
params={'q': form_q, 'catalog': catalog_id},
headers={
'Authorization': f'Bearer {access_token}',
'Accept-Language': 'ru',
},
json={'engine': '1UZ-FE', 'transmission': 'AT'},
timeout=30,
)
response.raise_for_status()
result = response.json()['result']<?php
$query = http_build_query(['q' => $formQ, 'catalog' => $catalogId]);
$ch = curl_init('http://192.168.70.253:3102/api/q?' . $query);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json',
'Accept-Language: ru',
],
CURLOPT_POSTFIELDS => json_encode(['engine' => '1UZ-FE', 'transmission' => 'AT']),
]);
$result = json_decode(curl_exec($ch), true)['result'];
curl_close($ch);Соединение = Новый HTTPСоединение("192.168.70.253", 3102, , , , 30);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept-Language", "ru");
Тело = Новый Структура;
Тело.Вставить("engine", "1UZ-FE");
Тело.Вставить("transmission", "AT");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Тело);
СтрокаЗапроса = "/api/q?q=" + КодироватьСтроку(УказательФормы, СпособКодированияСтроки.КодировкаURL)
+ "&catalog=" + КаталогИд;
Запрос = Новый HTTPЗапрос(СтрокаЗапроса, Заголовки);
Запрос.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8,
ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);Ответ
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
success | boolean | да | Признак успешного ответа. |
result | Result | да | Полезная нагрузка. Набор полей зависит от того, какой указатель передан в q. |
Вложенные объекты
Ответ — объединение вариантов: заполнены только поля, относящиеся к текущему разделу каталога.
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
lists_group | MainGroup[] | нет | Главные группы узлов. Приходит в ответ на vehicle.qMainGroup. |
lists | ListItem[] | нет | Список узлов или подгрупп текущего уровня. |
node | Node | нет | Карточка узла: схема, точки на схеме и детали. |
serviceParts | object[] | нет | Сервисные позиции, сгруппированные по разделам: { key, title, list[] } с таблицами внутри. |
nodesBlockData | object | нет | Блок табличных данных вместо списка узлов: { tables }. |
forms | Form[] | нет | Формы фильтрации. Значения полей отправляются обратно методом POST. |
tables | Table[] | нет | Табличные данные раздела. |
partinfo | PartInfo | нет | Информация по детали. Может прийти объектом или массивом таблиц. |
groupinfo | PartInfo | нет | Информация по группе деталей. |
replacement | PartInfo | нет | Замены детали. |
compatibility | PartInfo | нет | Применимость детали. |
listinfo | PartInfo | нет | Информация по строке списка. |
images | Image[] | нет | Изображения раздела. |
html | string | нет | Готовый HTML-блок для показа в модальном окне. |
modal | object | нет | Модальное окно с данными: { title, tables, images }. |
bread_crumb | BreadCrumb[] | нет | Хлебные крошки текущего уровня. |
flagTranslate | boolean | нет | Названия переведены машинным переводом. |
type | string | нет | Режим работы каталога, из которого получены данные, например offline. |
resultCode | number | нет | Внутренний код результата каталога. При успехе — 200. |
vin | string | нет | VIN автомобиля, в контексте которого выполняется обход каталога. |
info | Info | нет | Сообщение для пользователя: подсказка или причина отказа. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
title | string | нет | Название группы. |
lists | ListItem[] | нет | Узлы группы. |
images | object[] | нет | Схемы группы с точками: { qImage, qImage_preview, width, height, hotspots }. |
hotspots | Hotspot[] | нет | Активные области на схеме группы. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
title | string | нет | Название узла или подгруппы. |
title_html | string | нет | Название с оформлением, если сервер его прислал. |
code | string | нет | Код узла в каталоге. |
q | string | нет | Указатель для перехода на следующий уровень. |
qImage | string | нет | Указатель на изображение узла. |
q_pdf | string | нет | Указатель на PDF-документ. |
q_listinfo | string | нет | Указатель на информацию по строке. |
q_modal_html | string | нет | Указатель на HTML-блок для модального окна. |
note | string | нет | Примечание к строке. |
table | Table | нет | Таблица, привязанная к строке. |
header | boolean | нет | Строка является заголовком раздела. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
code | string | нет | Код узла. |
name | string | нет | Название узла. |
title | string | нет | Заголовок карточки. |
note | string | нет | Примечание к узлу. |
images | Image[] | нет | Схемы узла. |
image_index | number | нет | Индекс схемы, которую нужно показать первой. |
hotspots | Hotspot[] | нет | Активные области на схеме, связанные с деталями через hotspotId. |
parts | Part[] | нет | Детали узла. |
qGroup | string | нет | Указатель на список соседних узлов группы. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
number | string | нет | Номер детали. |
number_2 | string | нет | Альтернативный номер. |
name | string | нет | Название детали. |
position | string | нет | Позиция на схеме. |
qty | string | нет | Количество в узле. |
hotspotId | string | нет | Связь с активной областью на схеме. |
note | string | нет | Примечание. Переводы строк в note_html уже разложены по абзацам. |
advanced | string | string[] | нет | Дополнительные сведения о детали. |
q_partinfo | string | нет | Указатель на карточку детали. |
q_replacement | string | нет | Указатель на замены детали. |
q_compatibility | string | нет | Указатель на применимость. |
q_groupinfo | string | нет | Указатель на информацию по группе. |
parts | Part[] | нет | Вложенные детали — состав узла раскрывается деревом. |
Фильтр или выбор модификации. Значения полей отправляются методом POST на тот же указатель.
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
q | string | нет | Указатель, на который отправляется форма. |
title | string | нет | Заголовок формы. |
type_action | enum | нет | Как форма отправляется: selector, button или selector_and_button. |
fields | FormField[] | нет | Поля формы. |
qBtn | string | нет | Указатель для кнопки, если она отличается от q. |
titleBtn | string | нет | Подпись кнопки. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
code | string | нет | Код поля. Используется ключом в теле POST-запроса. |
id | string | нет | Идентификатор поля, если код не задан. |
label | string | нет | Подпись поля. |
type | string | нет | Тип поля: select, checkbox и другие. |
value | string | нет | Текущее значение. |
options | object[] | нет | Варианты выбора: { label, value }. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
qImage | string | нет | Указатель на изображение. |
imageId | string | нет | Идентификатор схемы в каталоге. |
q | string | нет | Указатель для перехода по изображению. |
urlImage | string | нет | Готовая ссылка, если сервер её вернул. |
title | string | нет | Подпись. |
width | number | нет | Ширина в пикселях. |
height | number | нет | Высота в пикселях. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
hotspotId | string | нет | Идентификатор области. Связывает схему с деталями узла. |
imageId | string | нет | Идентификатор изображения. |
left | number | нет | Отступ слева. |
top | number | нет | Отступ сверху. |
width | number | нет | Ширина области. |
height | number | нет | Высота области. |
q | string | нет | Указатель для перехода по области. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
title | string | нет | Заголовок таблицы. |
headers | object[] | нет | Описание колонок: { id, value, style, slot }. В части ответов приходит под ключом header. |
data | object[] | нет | Строки: объекты, ключи которых совпадают с id колонок. |
q | string | нет | Указатель для перехода по строке. |
flag_hide_header | boolean | нет | Шапку выводить не нужно. |
Общая структура для partinfo, groupinfo, replacement, compatibility и listinfo.
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
q | string | нет | Указатель для возврата на этот уровень. |
title | string | нет | Название уровня. |
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
type | enum | нет | default, info, success или error. |
title | string | нет | Заголовок сообщения. |
text | string | нет | Текст сообщения. |
html | string | нет | Оформленный текст. |
links | object[] | нет | Ссылки вида { q, title }. |
{
"success": true,
"result": {
"bread_crumb": [
{ "q": "702c9916-428a-433d-8eac-2245d9a48834", "title": "JTJBERBZ602000192" }
],
"type": "offline",
"resultCode": 200,
"vin": "JTJBERBZ602000192",
"lists": [
{
"code": "2",
"title": "ДВИГАТЕЛЬ",
"q": "a4607a7d-5096-472b-a85c-2d6b71fcdc2a",
"qImage": "d2386829-c388-4e4e-be8d-3f36826c418d"
}
]
}
}Ошибки
| HTTP | Код ошибки | Когда возникает |
|---|---|---|
| 401 | Unauthorized | Токен не передан или истёк. Обновите пару через /auth/refresh и повторите запрос. |
| 200 | result.info | Раздел недоступен или указатель устарел. Ответ приходит с кодом 200, причина — в result.info с типом error. |
Дополнительная информация
- Порядок обхода:
qMainGroup→lists_group→lists[].q→nodeс деталями. - Детали в
node.partsсвязаны со схемой черезhotspotId: подсветка области соответствует строке в списке. - Изображения отдаются указателями
qImage, а не готовыми ссылками — файл забирается отдельным запросом по базовому адресу изображений. - При смене языка повторите последний запрос с новым
Accept-Language: перевод выполняется на стороне сервера.