При разработке интеграций на базе HTTP-сервисов в платформе 1С:Предприятие 8.3 крайне важно понимать, из каких сегментов состоит итоговый URL-адрес и где именно в системе настраивается каждая его часть. Неправильное понимание структуры адреса часто приводит к ошибкам 404 Not Found или невозможности достучаться до базы данных через веб-сервер. В этой статье мы подробно разберем анатомию адреса http://Сервер:Порт/Путь1/hs/Путь2/Метод?Переменная=Значение и выясним, за что отвечает конфигуратор, а за что — настройки публикации.
Согласно документации и практике разработки, полный путь к методу HTTP-сервиса 1С формируется по следующему шаблону:
http://[host]/[base]/hs/[rootURL]/[relativeURL]
Рассмотрим каждый сегмент по порядку, чтобы понять, где он определяется и как им управлять.
Часть адреса http://Сервер:Порт/ не имеет прямого отношения к метаданным 1С. Разберем подробнее:
localhost.80, а для HTTPS — 443. Если ваш веб-сервер настроен на нестандартный порт (например, 8080), его необходимо явно указывать в адресе.Эти параметры настраиваются в конфигурационных файлах веб-сервера (например, httpd.conf для Apache) или через консоль управления IIS. 1С лишь «подключается» к уже работающему веб-серверу через специальные модули расширения (wsap24.dll или isapi_1cpp.dll).
Сегмент Путь1 — это имя, под которым вы опубликовали свою информационную базу на веб-сервере. Проанализируем, как это работает:
Когда мы заходим в Конфигуратор и выбираем меню «Администрирование — Публикация на веб-сервере», в поле «Имя» мы задаем именно этот сегмент. Например, если указать там TradeBase, то адрес начнется с http://server/TradeBase/....
Технически эта настройка фиксируется в файле default.vrd. Рассмотрим пример структуры этого файла, где атрибут base узла point определяет имя публикации, а ib — строку соединения с базой данных:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/TradeBase"
ib="Srvr="MainServer";Ref="Trade_Production";">
<httpServices publishByDefault="true">
</httpServices>
</point>
Именно благодаря этому файлу веб-сервер понимает, в какую конкретно базу 1С нужно перенаправить запрос, что позволяет использовать внешние инструменты, такие как универсальный Python-коннектор к 1С — поможет библиотека интеграции Python с 1С через HTTP.
Сегмент /hs/ является жестко заданной константой платформы 1С. Он служит индикатором для модуля расширения веб-сервера, что данный запрос предназначен именно для механизма HTTP-сервисов. Если вы используете SOAP-сервисы, в этом месте будет стоять /ws/. Пропустить или переименовать этот сегмент нельзя — это «ключ», по которому платформа активирует нужный обработчик.
Перейдем к настройкам в самом Конфигураторе (для этих целей также можно использовать конструктор API для обмена базы 1С). Выясним, где задается Путь2: для разработки таких сервисов подойдёт конструктор API для Telegram-ботов и внешних интеграций.
Путь2 (как это сделано в HTTP API сервисе задач пользователя).Важно: По умолчанию корневой URL чувствителен к регистру. Если вы написали MyAPI, а вызываете myapi, платформа может вернуть 404 ошибку.
Внутри объекта «HTTP-сервис» создаются «Шаблоны URL». Свойство «Шаблон» определяет оставшуюся часть пути. Разберем варианты заполнения шаблонов:
/ping, то адрес будет .../hs/Путь2/ping./user/{ID}. В коде 1С значение, переданное вместо {ID}, будет доступно в коллекции ПараметрыURL объекта HTTPСервисЗапрос.* (например, /v1/*) позволяет перехватывать все запросы, начинающиеся с /v1/.Посмотрим на пример кода в обработчике метода (например, GET), который извлекает данные из такого шаблона:
Функция ИмяМетодаGET(Запрос)
// Получение параметра из шаблона /user/{ID}
ИдентификаторПользователя = Запрос.ПараметрыURL.Получить("ID");
// Получение всей "хвостовой" части, если использовалась маска *
ОстатокПути = Запрос.ОтносительныйURL;
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Данные для ID: " + ИдентификаторПользователя);
Возврат Ответ;
КонецФункции
Часть адреса после знака вопроса (Query Parameters) не описывается в структуре метаданных 1С. Вы можете передавать там любые произвольные пары ключ-значение. Платформа автоматически собирает их в коллекцию ПараметрыЗапроса.
Например, для адреса .../Метод?Status=Active&Type=Full мы можем написать следующий код:
ТекущийСтатус = Запрос.ПараметрыЗапроса.Получить("Status"); // Вернет "Active"
ВидВыгрузки = Запрос.ПараметрыЗапроса.Получить("Type"); // Вернет "Full"
Подведем итог, чтобы закрепить понимание структуры:
base в default.vrd).Практический совет: При возникновении проблем с доступом всегда проверяйте файл default.vrd в каталоге публикации. Иногда при повторной публикации настройки могут сброситься, и секция <httpServices> может стать пустой или получить атрибут publishByDefault="false", что заблокирует внешние вызовы даже при правильно сформированном URL.