HTTP сервис 1С своими руками создаётся в ветке Общие, HTTP-сервисы: добавьте шаблон URL, метод GET или POST и обработчик, который возвращает HTTPСервисОтвет с кодом, заголовком Content-Type и телом JSON. Публикуйте сервис только после настройки аутентификации, прав и безопасной обработки входных данных.
Платформа позволяет создавать произвольные HTTP-сервисы дополнительно к автоматическому REST-интерфейсу. URL сопоставляется с шаблоном и методом. Если совпадения нет, платформа возвращает 404. Обработчик получает объект HTTPСервисЗапрос с URL, заголовками и телом, а затем формирует HTTPСервисОтвет. Сервис ориентируйте на ресурсы, используйте стандартные методы и возвращайте однозначные статусы. До публикации опишите контракт в таблице: метод, путь, авторизация, входные поля, успешный ответ и ошибки. Версионируйте несовместимые изменения в URL или заголовке, чтобы старые клиенты не получили внезапно другую структуру. Для диагностики добавьте correlation id, но не включайте персональные данные в открытые журналы.
Путь ресурса, например status или products/{id}.
GET читает, POST создаёт или запускает обработку.
Код, Content-Type, тело и безопасные сообщения ошибок.

HTTP сервис 1С своими руками: первый обработчик GET
Создайте сервис Api, шаблон status и метод GET с обработчиком GetStatus. Пример возвращает постоянный ответ, поэтому подходит для health-check учебной публикации. Строка JSON должна быть корректно экранирована во встроенном языке, а Content-Type должен указывать кодировку.
Функция GetStatus(Запрос)
ТелоОтвета = "{""status"":""ok"",""service"":""1c""}";
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить(
"Content-Type",
"application/json; charset=utf-8"
);
Ответ.УстановитьТелоИзСтроки(
ТелоОтвета,
КодировкаТекста.UTF8
);
Возврат Ответ;
КонецФункции- GET endpoint возвращает код 200
- Тело содержит JSON с полем status ok, а заголовок Content-Type равен application/json
Для сложного JSON используйте ЗаписьJSON и ЗаписатьJSON, а не ручную конкатенацию. Параметр {id} получите из параметров URL и проверьте до обращения к данным. Не возвращайте текст исключения или стек клиенту: запишите технические детали в защищённый журнал, а наружу дайте стабильный код ошибки и request id. Для неверного ввода используйте 400, для отсутствующего ресурса 404, для конфликта 409.
Минимальный контракт endpoint
| Элемент | Что означает | Что делать |
|---|---|---|
| 200 | Запрос выполнен | JSON с результатом |
| 201 | Ресурс создан | Идентификатор и Location по необходимости |
| 400 | Неверный ввод | Код ошибки и поле |
| 401/403 | Нет аутентификации или прав | Без лишних деталей |
| 404 | Ресурс не найден | Стабильный код not_found |
Проверьте сервис через curl с заголовком Accept, затем негативные сценарии и неизвестный путь. Аутентификацию не заменяйте секретом в URL: адрес попадает в журналы и историю. Используйте HTTPS, отдельного пользователя с минимальными правами, ограничения размера тела и таймауты. Идемпотентность и повторные запросы особенно важны для интеграций, где сеть может оборваться после выполнения операции.

Практика: соберите endpoint status и получите 200 и 404 в curl
Соберите в тестовой конфигурации HTTP-сервис Api с шаблоном status и методом GET. Успехом считайте ответ 200 с телом {"status":"ok","service":"1c"} на опубликованный адрес и 404 на неизвестный путь. Работайте на копии базы: учебная публикация не должна попадать в рабочую.
- Объект HTTP-сервис Api. В ветке Общие, HTTP-сервисы добавьте сервис с именем Api и задайте корневой URL. В дереве конфигурации появится узел с пустым списком шаблонов.
- Шаблон status и метод GET. Добавьте шаблон с адресом /status, внутри него метод GET и укажите имя обработчика GetStatus. Обработчик ещё пуст, но платформа уже знает, какую пару путь плюс метод ей ловить.
- Функция GetStatus. Напишите Функция GetStatus(Запрос): создайте Новый HTTPСервисОтвет(200), вставьте заголовок Content-Type со значением application/json; charset=utf-8 и передайте тело через УстановитьТелоИзСтроки с КодировкаТекста.UTF8. Кавычки внутри строки JSON удваивайте.
- Публикация и первый curl. Опубликуйте сервис на веб-сервере и вызовите его через curl -i с заголовком Accept: application/json. В первой строке ответа должно стоять 200, ниже видно тело со значением ok.
- Проверка 404 и метода. Запросите заведомо неверный путь, например statuss, и повторите правильный адрес методом POST. Совпадения шаблона нет, платформа возвращает 404, и это подтверждает: маршрут задают путь и метод вместе.
Сломайте ответ намеренно: уберите вставку заголовка Content-Type или оставьте кодировку по умолчанию в УстановитьТелоИзСтроки. Клиент получит те же 200, но тип будет не application/json, а кириллица приедет испорченной, и разбор JSON на стороне вызывающей системы упадёт. Это ровно тот случай, когда статус 200 прячет проблему внутри строки. Верните заголовок и UTF8 и убедитесь, что curl снова показывает application/json; charset=utf-8.
Дальше добавьте шаблон products/{id} и достаньте параметр из URL. Проверяйте id до обращения к данным: на нечисловое значение отвечайте 400 с указанием поля, на ненайденный объект 404 со стабильным кодом not_found. Сложное тело перестаньте склеивать строками и соберите через ЗаписьJSON и ЗаписатьJSON. Для сервиса заведите отдельного пользователя с минимальными правами, чтобы endpoint не работал в базе под полным доступом.
Частые ошибки и почему они появляются
Опасный сервис принимает произвольное имя объекта и выполняет переданный код. Другая ошибка: все ответы имеют статус 200, а проблема спрятана в строке. Третья: обработчик выполняет долгую массовую операцию синхронно и держит соединение. Для тяжёлой задачи лучше принять запрос, создать задание и вернуть идентификатор статуса.
Используйте штатную сериализацию для переменных данных.
Создайте роль с минимально необходимыми действиями.
Проверьте пустое тело, неверный тип, отсутствующий id и повтор запроса.
Самопроверка
Что вернёт 1С, если URL не совпал ни с одним шаблоном?
Платформа вернёт 404, если URL не совпал ни с одним шаблоном HTTP-сервиса. Сопоставление идёт по шаблону и методу сразу, поэтому знакомый путь с неподходящим методом тоже не найдёт обработчик.
Как вернуть JSON из HTTP-сервиса 1С?
JSON возвращают в теле объекта HTTPСервисОтвет: создайте ответ с кодом 200, вставьте заголовок Content-Type со значением application/json; charset=utf-8 и положите строку через УстановитьТелоИзСтроки с КодировкаТекста.UTF8. Для переменных данных строку не склеивайте руками, а собирайте через ЗаписьJSON и ЗаписатьJSON.
Можно ли передавать токен в URL сервиса?
Токен в URL передавать не стоит: адрес сохраняется в журналах веб-сервера, истории браузера и на прокси. Аутентификацию выносите в заголовок, работайте по HTTPS и заводите сервису отдельного пользователя с минимальными правами.
Чем отличаются GET и POST в HTTP-сервисе 1С?
GET в HTTP-сервисе читает данные, POST создаёт ресурс или запускает обработку. У одного шаблона это разные методы с разными обработчиками, поэтому чтение и запись не смешиваются в одном куске кода.
Какой код ответа вернуть при неверных данных?
На неверный ввод верните 400 с кодом ошибки и указанием поля, на отсутствующий ресурс 404, на конфликт 409, на отсутствие аутентификации или прав 401 и 403. Отвечать 200 на любую ситуацию нельзя: клиент не отличит успех от ошибки без разбора текста.
Что делать, если обработчик выполняет долгую операцию?
Долгую массовую операцию не выполняйте прямо в обработчике: соединение будет висеть до конца обработки и оборвётся по таймауту. Примите запрос, создайте задание и верните идентификатор, по которому клиент потом запросит статус.
Что делать дальше
Сделайте status endpoint, проверьте 200 и 404 через curl, затем добавьте один параметризованный ресурс. Базовый код можно практиковать на профессии Backend-разработчик. Для чтения данных используйте язык запросов 1С, а модель хранения уточните в статье про регистры.
