HTTP-сервисы в 1С
Создание модуля API с 5 шаблонами URL согласно мастер-классу для работы с категориями и товарами
Создание HTTP-сервиса API
Добавление нового HTTP-сервиса в раздел Общие
Переход к HTTP-сервисам
Находим раздел в дереве конфигурации
- 1В дереве конфигурации найдите раздел Общие
- 2Раскройте раздел Общие
- 3Найдите подраздел HTTP-сервисы
- 4Щелкните правой кнопкой на разделе HTTP-сервисы и выберите Добавить
Настройка модуля API
Указываем параметры согласно мастер-классу
- 1В поле Имя введите: API
- 2В поле Корневой URL введите: api
- 3Остальные настройки оставьте по умолчанию
Создание 5 шаблонов URL
Добавим все шаблоны согласно мастер-классу с точными маршрутами
Шаблон 1: Категории
Создаем первый шаблон для получения всех категорий
- 1Щелкните правой кнопкой на модуле API
- 2Выберите Добавить → Шаблон URL
- 3Имя: Категории
- 4Шаблон: /categories
Метод GET для Категории
Добавляем метод для получения категорий
- 1Щелкните правой кнопкой по шаблону Категории
- 2Нажмите Добавить → Метод
- 3Имя: GET
- 4HTTP-метод: GET
- 5Обработчик: ПолучитьКатегории
Шаблон 2: IDКатегории
Создаем шаблон для получения определенной категории
- 1Создайте новый шаблон URL аналогично
- 2Имя: IDКатегории
- 3Шаблон: /categories/{id}
- 4Добавьте метод GET
- 5Обработчик: ПолучитьОпределеннуюКатегорию
Шаблон 3: ТоварыКатегории
Создаем шаблон для получения товаров категории
- 1Создайте третий шаблон URL
- 2Имя: ТоварыКатегории
- 3Шаблон: /categories/{id}/products
- 4Добавьте метод GET
- 5Обработчик: ПолучитьТоварыКатегории
Шаблон 4: ВсеТовары
Создаем шаблон для получения всех товаров
- 1Создайте четвертый шаблон URL
- 2Имя: ВсеТовары
- 3Шаблон: /categories/products
- 4Добавьте метод GET
- 5Обработчик: ПолучитьВсеТовары
Шаблон 5: ОпределенныйТовар
Создаем шаблон для получения конкретного товара
- 1Создайте пятый шаблон URL
- 2Имя: ОпределенныйТовар
- 3Шаблон: /categories/{id}/products/{id_product}
- 4Добавьте метод GET
- 5Обработчик: ПолучитьОпределенныйТовар
Открытие модуля для программирования
Переходим к написанию кода обработчиков
Открытие модуля API
Открываем модуль для написания кода
- 1Щелкните правой кнопкой на модуле API
- 2Выберите Открыть модуль
- 3Откроется редактор кода модуля
- 4Здесь нужно вставить код из мастер-класса
Код обработчиков
В открывшемся модуле необходимо написать функции-обработчики: ПолучитьКатегории, ПолучитьОпределеннуюКатегорию, ПолучитьТоварыКатегории, ПолучитьВсеТовары, ПолучитьОпределенныйТовар. Код этих функций предоставляется в мастер-классе.
Пример кода обработчиков
Код функций для HTTP-сервиса
Функция ПолучитьКатегории(Запрос)
Попытка
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
МассивКатегорий = Новый Массив;
ЗапросКатегорий = Новый Запрос;
ЗапросКатегорий.Текст =
"ВЫБРАТЬ
| Категории.Ссылка,
| Категории.Код,
| Категории.Наименование
|ИЗ
| Справочник.Категории КАК Категории
|ГДЕ
| НЕ Категории.ЭтоГруппа
| И НЕ Категории.ПометкаУдаления";
РезультатЗапроса = ЗапросКатегорий.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Категория = Новый Структура;
Категория.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Категория.Вставить("code", Выборка.Код);
Категория.Вставить("name", Выборка.Наименование);
МассивКатегорий.Добавить(Категория);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивКатегорий);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
Исключение
Ответ = Новый HTTPСервисОтвет(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера: " + ОписаниеОшибки());
Возврат Ответ;
КонецПопытки;
КонецФункции
Функция ПолучитьОпределеннуюКатегорию(Запрос)
Попытка
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
ПараметрыЗапроса = Запрос.ПараметрыURL;
ИдентификаторКатегории = ПараметрыЗапроса.Получить("id");
Если ИдентификаторКатегории = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: не указан идентификатор категории");
Возврат Ответ;
КонецЕсли;
Попытка
СсылкаКатегории = Справочники.Категории.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторКатегории));
Исключение
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: неверный формат идентификатора категории");
Возврат Ответ;
КонецПопытки;
ЗапросКатегории = Новый Запрос;
ЗапросКатегории.Текст =
"ВЫБРАТЬ
| Категории.Ссылка,
| Категории.Код,
| Категории.Наименование
|ИЗ
| Справочник.Категории КАК Категории
|ГДЕ
| Категории.Ссылка = &Ссылка";
ЗапросКатегории.УстановитьПараметр("Ссылка", СсылкаКатегории);
РезультатЗапроса = ЗапросКатегории.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если НЕ Выборка.Следующий() Тогда
Ответ = Новый HTTPСервисОтвет(404);
Ответ.УстановитьТелоИзСтроки("Категория не найдена");
Возврат Ответ;
КонецЕсли;
Категория = Новый Структура;
Категория.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Категория.Вставить("code", Выборка.Код);
Категория.Вставить("name", Выборка.Наименование);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Категория);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
Исключение
Ответ = Новый HTTPСервисОтвет(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера: " + ОписаниеОшибки());
Возврат Ответ;
КонецПопытки;
КонецФункции
Функция ПолучитьТоварыКатегории(Запрос)
Попытка
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
ПараметрыЗапроса = Запрос.ПараметрыURL;
ИдентификаторКатегории = ПараметрыЗапроса.Получить("id");
Если ИдентификаторКатегории = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: не указан идентификатор категории");
Возврат Ответ;
КонецЕсли;
Попытка
СсылкаКатегории = Справочники.Категории.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторКатегории));
Исключение
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: неверный формат идентификатора категории");
Возврат Ответ;
КонецПопытки;
МассивТоваров = Новый Массив;
ЗапросТоваров = Новый Запрос;
ЗапросТоваров.Текст =
"ВЫБРАТЬ
| Товары.Ссылка,
| Товары.Код,
| Товары.Наименование,
| Товары.Артикул,
| Товары.Цена,
| Товары.ЕдиницаИзмерения,
| Товары.Активен
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Категория = &Категория
| И Товары.Активен = Истина
| И НЕ Товары.ПометкаУдаления";
ЗапросТоваров.УстановитьПараметр("Категория", СсылкаКатегории);
РезультатЗапроса = ЗапросТоваров.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Товар = Новый Структура;
Товар.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Товар.Вставить("code", Выборка.Код);
Товар.Вставить("name", Выборка.Наименование);
Товар.Вставить("article", Выборка.Артикул);
Товар.Вставить("price", Выборка.Цена);
Товар.Вставить("unit", Строка(Выборка.ЕдиницаИзмерения));
Товар.Вставить("active", Выборка.Активен);
МассивТоваров.Добавить(Товар);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивТоваров);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
Исключение
Ответ = Новый HTTPСервисОтвет(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера: " + ОписаниеОшибки());
Возврат Ответ;
КонецПопытки;
КонецФункции
Функция ПолучитьВсеТовары(Запрос)
Попытка
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
МассивТоваров = Новый Массив;
ЗапросТоваров = Новый Запрос;
ЗапросТоваров.Текст =
"ВЫБРАТЬ
| Товары.Ссылка,
| Товары.Код,
| Товары.Наименование,
| Товары.Артикул,
| Товары.Цена,
| Товары.ЕдиницаИзмерения,
| Товары.Активен,
| Товары.Категория.Код КАК КодКатегории,
| Товары.Категория.Наименование КАК НаименованиеКатегории
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Активен = Истина
| И НЕ Товары.ПометкаУдаления";
РезультатЗапроса = ЗапросТоваров.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Товар = Новый Структура;
Товар.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Товар.Вставить("code", Выборка.Код);
Товар.Вставить("name", Выборка.Наименование);
Товар.Вставить("article", Выборка.Артикул);
Товар.Вставить("price", Выборка.Цена);
Товар.Вставить("unit", Строка(Выборка.ЕдиницаИзмерения));
Товар.Вставить("active", Выборка.Активен);
Категория = Новый Структура;
Категория.Вставить("code", Выборка.КодКатегории);
Категория.Вставить("name", Выборка.НаименованиеКатегории);
Товар.Вставить("category", Категория);
МассивТоваров.Добавить(Товар);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивТоваров);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
Исключение
Ответ = Новый HTTPСервисОтвет(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера: " + ОписаниеОшибки());
Возврат Ответ;
КонецПопытки;
КонецФункции
Функция ПолучитьОпределенныйТовар(Запрос) Экспорт
Попытка
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
ПараметрыЗапроса = Запрос.ПараметрыURL;
ИдентификаторТовара = ПараметрыЗапроса.Получить("id_product");
Если ИдентификаторТовара = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: не указан идентификатор товара");
Возврат Ответ;
КонецЕсли;
Попытка
СсылкаТовара = Справочники.Товары.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторТовара));
Исключение
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Ошибка: неверный формат идентификатора товара");
Возврат Ответ;
КонецПопытки;
ЗапросТовара = Новый Запрос;
ЗапросТовара.Текст =
"ВЫБРАТЬ
| Товары.Ссылка,
| Товары.Код,
| Товары.Наименование,
| Товары.Артикул,
| Товары.Цена,
| Товары.ЕдиницаИзмерения,
| Товары.Активен,
| Товары.Категория.Код КАК КодКатегории,
| Товары.Категория.Наименование КАК НаименованиеКатегории
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
| И Товары.Активен = Истина
| И НЕ Товары.ПометкаУдаления";
ЗапросТовара.УстановитьПараметр("Ссылка", СсылкаТовара);
РезультатЗапроса = ЗапросТовара.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если НЕ Выборка.Следующий() Тогда
Ответ = Новый HTTPСервисОтвет(404);
Ответ.УстановитьТелоИзСтроки("Товар не найден");
Возврат Ответ;
КонецЕсли;
Товар = Новый Структура;
Товар.Вставить("id", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Товар.Вставить("code", Выборка.Код);
Товар.Вставить("name", Выборка.Наименование);
Товар.Вставить("article", Выборка.Артикул);
Товар.Вставить("price", Выборка.Цена);
Товар.Вставить("unit", Строка(Выборка.ЕдиницаИзмерения));
Товар.Вставить("active", Выборка.Активен);
Категория = Новый Структура;
Категория.Вставить("code", Выборка.КодКатегории);
Категория.Вставить("name", Выборка.НаименованиеКатегории);
Товар.Вставить("category", Категория);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Товар);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
Исключение
Ответ = Новый HTTPСервисОтвет(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера: " + ОписаниеОшибки());
Возврат Ответ;
КонецПопытки;
КонецФункцииСоздание пользователя admin
Создаем пользователя для работы с API
Переход к администрированию
Создаем пользователя согласно мастер-классу
- 1В верхней панели нажмите Администрирование
- 2Выберите Пользователи
- 3Добавьте нового пользователя
- 4Имя пользователя: admin
- 5Пароль: root
- 6Назначьте роль Администратор
Запуск и проверка
Тестируем созданные HTTP-сервисы
Запуск базы
Переходим в режим Предприятие для тестирования
- 1Нажмите Ctrl+F5 или используйте верхнюю панель Сервис → 1С:Предприятие
- 2Согласитесь с изменениями конфигурации
- 3Введите пароль, если потребуется: root
- 4База должна успешно запуститься
Готовность к следующему этапу
HTTP-сервисы созданы и готовы к работе. После настройки Apache и публикации сервисов, API будет доступно по адресам вида: http://localhost:80/chvt2025/hs/api/categories/
HTTP-сервисы готовы!
Модуль API с 5 шаблонами URL создан согласно мастер-классу. Все обработчики настроены, пользователь admin создан. Можно переходить к установке Apache.