1С: Быстрый и отказоустойчивый HTTP-сервис
Чек-лист создания легковесных REST-эндпоинтов без блокировок и утечек
Обновлено: Октябрь 2026•Время чтения: 4 мин•
#1С#HTTP-сервисы#REST#JSON#Архитектура
Краткая суть (TL;DR)
Как проектировать HTTP-сервисы в 1С 8.3: формат JSON, отдача 200/400/500, работа без зависших транзакций, идемпотентность и журнал сбоев.
1. Базовый шаблон обработчика GET/POST
Всегда перехватывайте исключения в корне метода и упаковывайте ответ в предсказуемый JSON:
bsl
Функция ЗаказыPOST(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
// Бизнес-логика: запись в регистр или проведение
Результат = ОбработатьЗаказ(Данные);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Новый Структура("success,id", Истина, Результат.Идентификатор));
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Исключение
Ответ.КодСостояния = 500;
ЗаписьЖурналаРегистрации("API.Заказы", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Ответ.УстановитьТелоИзСтроки("{""error"":""Внутренняя ошибка сервиса""}");
КонецПопытки;
Возврат Ответ;
КонецФункцииВажные нюансы и рекомендации:
- ◆Никогда не выполняйте тяжелую аналитику синхронно — складывайте сырой JSON в промежуточный регистр сведений и обрабатывайте фоновым заданием.
- ◆Используйте Content-Type: application/json; charset=utf-8 обязательно, иначе клиенты на Go/Node.js могут сломаться на кириллице.
- ◆Для отслеживания сквозных цепочек логируйте входящий заголовок X-Request-Id.
2. Идемпотентность и повторные запросы
Шлюзы банков и маркетплейсов всегда повторяют запросы при таймаутах. Защитите базу от дублей документов:
Важные нюансы и рекомендации:
- ◆Создайте регистр сведений «ВходящиеСообщения» (Измерения: Источник, ВнешнийИдентификатор).
- ◆При старте транзакции фиксируйте статус «ВОбработке». Если ключ уже есть — отдавайте 200 OK с сохраненным ранее результатом, не создавая повторный документ.
- ◆Периодически очищайте лог старше 30 дней регламентным заданием.
