{}const=>[]async()letfn</>var
1CBackend

HTTP-сервис 1С своими руками: endpoint, JSON и коды ответа

Создаём HTTP-сервис в конфигураторе 1С: шаблон URL, метод GET, обработчик, JSON-ответ, Content-Type, коды 200, 400 и 404, публикация и проверка curl.

К

Кодик

Автор

6 мин чтения

HTTP сервис 1С своими руками создаётся в ветке Общие, HTTP-сервисы: добавьте шаблон URL, метод GET или POST и обработчик, который возвращает HTTPСервисОтвет с кодом, заголовком Content-Type и телом JSON. Публикуйте сервис только после настройки аутентификации, прав и безопасной обработки входных данных.

Платформа позволяет создавать произвольные HTTP-сервисы дополнительно к автоматическому REST-интерфейсу. URL сопоставляется с шаблоном и методом. Если совпадения нет, платформа возвращает 404. Обработчик получает объект HTTPСервисЗапрос с URL, заголовками и телом, а затем формирует HTTPСервисОтвет. Сервис ориентируйте на ресурсы, используйте стандартные методы и возвращайте однозначные статусы. До публикации опишите контракт в таблице: метод, путь, авторизация, входные поля, успешный ответ и ошибки. Версионируйте несовместимые изменения в URL или заголовке, чтобы старые клиенты не получили внезапно другую структуру. Для диагностики добавьте correlation id, но не включайте персональные данные в открытые журналы.

1Шаблон

Путь ресурса, например status или products/{id}.

2Метод

GET читает, POST создаёт или запускает обработку.

3Ответ

Код, Content-Type, тело и безопасные сообщения ошибок.

Как запрос проходит от шаблона URL до HTTPСервисОтвет
Платформа сопоставляет URL с шаблоном status, сверяет метод GET, передаёт HTTPСервисЗапрос в обработчик GetStatus и отдаёт наружу HTTPСервисОтвет с кодом 200.

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.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Минимальный контракт endpoint

ЭлементЧто означаетЧто делать
200Запрос выполненJSON с результатом
201Ресурс созданИдентификатор и Location по необходимости
400Неверный вводКод ошибки и поле
401/403Нет аутентификации или правБез лишних деталей
404Ресурс не найденСтабильный код not_found

Проверьте сервис через curl с заголовком Accept, затем негативные сценарии и неизвестный путь. Аутентификацию не заменяйте секретом в URL: адрес попадает в журналы и историю. Используйте HTTPS, отдельного пользователя с минимальными правами, ограничения размера тела и таймауты. Идемпотентность и повторные запросы особенно важны для интеграций, где сеть может оборваться после выполнения операции.

Что стоит между внешним клиентом и базой 1С
Безопасная граница интеграции: HTTPS, отдельный пользователь с минимальными правами, ограничение размера тела и таймаут, а наружу только стабильный код ошибки и request id.

Практика: соберите endpoint status и получите 200 и 404 в curl

Соберите в тестовой конфигурации HTTP-сервис Api с шаблоном status и методом GET. Успехом считайте ответ 200 с телом {"status":"ok","service":"1c"} на опубликованный адрес и 404 на неизвестный путь. Работайте на копии базы: учебная публикация не должна попадать в рабочую.

  1. Объект HTTP-сервис Api. В ветке Общие, HTTP-сервисы добавьте сервис с именем Api и задайте корневой URL. В дереве конфигурации появится узел с пустым списком шаблонов.
  2. Шаблон status и метод GET. Добавьте шаблон с адресом /status, внутри него метод GET и укажите имя обработчика GetStatus. Обработчик ещё пуст, но платформа уже знает, какую пару путь плюс метод ей ловить.
  3. Функция GetStatus. Напишите Функция GetStatus(Запрос): создайте Новый HTTPСервисОтвет(200), вставьте заголовок Content-Type со значением application/json; charset=utf-8 и передайте тело через УстановитьТелоИзСтроки с КодировкаТекста.UTF8. Кавычки внутри строки JSON удваивайте.
  4. Публикация и первый curl. Опубликуйте сервис на веб-сервере и вызовите его через curl -i с заголовком Accept: application/json. В первой строке ответа должно стоять 200, ниже видно тело со значением ok.
  5. Проверка 404 и метода. Запросите заведомо неверный путь, например statuss, и повторите правильный адрес методом POST. Совпадения шаблона нет, платформа возвращает 404, и это подтверждает: маршрут задают путь и метод вместе.

Сломайте ответ намеренно: уберите вставку заголовка Content-Type или оставьте кодировку по умолчанию в УстановитьТелоИзСтроки. Клиент получит те же 200, но тип будет не application/json, а кириллица приедет испорченной, и разбор JSON на стороне вызывающей системы упадёт. Это ровно тот случай, когда статус 200 прячет проблему внутри строки. Верните заголовок и UTF8 и убедитесь, что curl снова показывает application/json; charset=utf-8.

Критерий готовности. Вы можете объяснить, где платформа сопоставляет URL с шаблоном, что приходит в объекте Запрос и какие три вещи вы кладёте в HTTPСервисОтвет: код, заголовок и тело. Подтверждение: сохранённый вывод curl -i с кодом 200 на рабочем пути и 404 на неизвестном. Отдельно скажите, какой код вернёте на пустое или неверное тело: 400.

Дальше добавьте шаблон products/{id} и достаньте параметр из URL. Проверяйте id до обращения к данным: на нечисловое значение отвечайте 400 с указанием поля, на ненайденный объект 404 со стабильным кодом not_found. Сложное тело перестаньте склеивать строками и соберите через ЗаписьJSON и ЗаписатьJSON. Для сервиса заведите отдельного пользователя с минимальными правами, чтобы endpoint не работал в базе под полным доступом.

Частые ошибки и почему они появляются

Опасный сервис принимает произвольное имя объекта и выполняет переданный код. Другая ошибка: все ответы имеют статус 200, а проблема спрятана в строке. Третья: обработчик выполняет долгую массовую операцию синхронно и держит соединение. Для тяжёлой задачи лучше принять запрос, создать задание и вернуть идентификатор статуса.

Ручной JSON

Используйте штатную сериализацию для переменных данных.

Полные права сервису

Создайте роль с минимально необходимыми действиями.

Нет негативных тестов

Проверьте пустое тело, неверный тип, отсутствующий 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С, а модель хранения уточните в статье про регистры.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты