HTTP-сервис в 1С: создание, публикация и отладка

 

В платформе версии 8.3.5 появилась возможность создавать HTTP-сервисы. Как и «старые» SOAP web-сервисы, HTTP-сервис позволяет получать/изменять данные, но при этом, как утверждает компания 1С, HTTP-сервисы потенциально позволяют упростить создание клиентских приложений, уменьшить объем передаваемых данных и вычислительную нагрузку, все это особенно для мобильных устройств.

В этой статья я постараюсь рассказать о том, как создавать, отлаживать и использовать HTTP-сервисы в 1С.

Начнем с того, что для создания HTTP-сервиса нам необходим веб-сервер, например Apache 2.2 (начиная с версии 8.3.8 и Apache 2.4 подойдет). Описывать установку веб-сервера думаю нет необходимости.

Создание HTTP-сервиса

Итак, создаем новый HTTP-сервис:

Новый HTTP-сервис
Новый HTTP-сервис

Корневой URL — важный параметр, входит в адрес по которому сервис будет доступен после публикации.

В соответствующем разделе создаем новый шаблон URL и метод:

Шаблоны URL и методы
Шаблоны URL и методы

У шаблона URL есть единственное свойство — шаблон. Этим свойством можно задать путь по которому будет происходить обращение к HTTP-сервису.  В шаблоне можно использовать параметризованные сегменты, как на рисунке ниже (об их использовании ниже).

Свойства шаблона
Свойства шаблона

У метода есть свойство HTTP-метод, которое можно указать выбрав одно из следующих значений: GET, POST, PUT, DELETE, PATCH, MERGE, CONNECT, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK или Любой.

При обращении к HTTP-сервису, платформа пытается сопоставить адрес, по которому произошло обращение с одним из имеющихся шаблонов и методов. Если сопоставить удалось, то будет выполнен обработчик метода, если же сопоставить не удалось, то будет возвращен код ответа 404.

Свойства метода
Свойства метода

Перейдем к примеру обработчика метода, в нем я возвращаю содержимое переменной «Запрос», которая передается в обработчик:

 

Публикация и проверка HTTP-сервиса

Наш HTTP-сервис готов к публикации, в этом нет ничего сложного (вероятно потребуется запустить конфигуратор от имени администратора):

Публикация HTTP-сервиса
Публикация HTTP-сервиса

После публикации я могу обратиться к сервису вот по такому адресу: http://localhost/HTTPTest/hs/Obmen/test-parametr/Test/GetInfo?param=value, где:

  • localhost — адрес сервера;
  • HTTPTest — имя указанное при публикации;
  • hs — обязательный сегмент пути, дающий понять, что работаем мы именно с HTTP-сервисом;
  • Obmen — корневой URL HTTP-сервиса;
  • test-paramenter/Test — путь к методу внутри сервиса, определяется шаблоном;
  • GetInfo — название метода;
  • ?param=value — необязательный пример передачи методу параметров.
Результат выполнения метода
Результат выполнения метода

Параметры URL, параметры запроса и заголовки представлены в виде фиксированных структур.

Вероятнее всего, при обращение к HTTP-сервису нужно будет авторизоваться (если в базе есть хоть один пользователь), есть несколько способов решения этой проблемы.

Первый — изменить файл default.vrd, который находится в каталоге публикации. В этом файле нужно дополнить строку подключения к базе, например, было:

ib=»File="C:\Base\TEST";»,

стало:

ib=»File="C:\Base\TEST";Usr=Логин;Pwd=Пароль».

В этом случае любые обращения к HTTP-сервису не будут требовать логина и пароля.

Во-вторых, можно указывать логин и пароль при подключении к HTTP-сервису:

В других языках программирования аналогично.

Кроме этого можно использовать windows-авторизацию.

Отладка HTTP-сервисов

Для того чтобы иметь возможность отлаживать HTTP-сервисы нужно, во-первых, опубликовать HTTP-сервис со следующими настройками:

Отладка HTTP-сервисов
Отладка HTTP-сервисов

Во-вторых, в конфигураторе, в меню «Отладка»->»Подключение…» нужно настроить автоматическое подключение:

Настройка автоматического подключения
Настройка автоматического подключения

И, наконец, в-третьих, нужно перезапустить веб-сервер.

Кроме этого для полноценной отладки могут потребоваться сторонние программы, так как браузер всегда старается использовать метод GET. Для тестирования всех остальных HTTP-методов можно использовать бесплатный Fiddler2 (http://www.telerik.com/fiddler).

Fiddler2 Composer
Fiddler2 Composer
Fiddler2 Inspectors
Fiddler2 Inspectors

На этом все, буду рад услышать любые дополнения и замечания.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 16, средняя оценка: 4,88 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 14
  1. Сергей

    А как в самой 1С увидеть результат обращения к веб сервису? Чтобы в самой 1С выскочило сообщение о том что произошло подключение из вне.. Заранее спасибо

  2. Александр

    Пишешь функцию отправки уведомления пользователю или всем, потом вешаешь триггер или в модуль отслеживания подключений вызов ставишь.

  3. Виктор

    Спасибо

  4. Роман

    Спасибо огромное за урок.
    Но вылезает ошибка:
    Not Found
    The requested URL /HTTPTest/hs/Obmen/test-parametr/Test/GetInfo was not found on this server.
    Не получается почему то. На localhost заходит, а на ваш урл нет. Куда копать?

  5. Алексей

    Спасибо за статью.
    Вопрос по соединению, которое открывает web-сервер к базе (к сервису).
    По какой-то причине соединение всегда использует английский язык.
    Снимок экрана https://i.imgur.com/msaJnLu.png
    В настройках пользователя указан «Русский». При интерактивной работе пользователя используется «Русский».
    Не знаете в какую сторону смотреть? :roll:

  6. Виталий

    чегой то не получается опубиковать веб сервис!

    сама база вроде публикуется а потом косяки какие то!

    смогли бы вы глянуть плиииз)

  7. Виталий

    чегой то не получается опубиковать веб сервис!
    тт
    сама база вроде публикуется а потом косяки какие то!

    смогли бы вы глянуть плиииз)

  8. Дмитрий

    ib=»File="C:\Base\TEST";»,
    стало:
    ib=»File="C:\Base\TEST";Usr=Логин;Pwd=Пароль».
    Залогинил. Все получилось. Единственный вопрос. А возможно ли прописать в модуле HTTP-сервиса логин (пользователя 1с) и пароль, а не менять файл default.vrd ? :smile: :idea:

  9. Леонид

    В самом начале листинга Вы создали параметр Номер, но в листингах и далее больше нигде не встречается упоминание об этом параметре.
    Можете пояснить, почему? Пытаюсь вникнуть в базовые принципы работы c http и много чего не понятно.

  10. Ktd

    Непонятно, откуда ВЫ взяли test-parametr:
    test-paramenter/Test — путь к методу внутри сервиса, определяется шаблоном;
    Где он прописан?????????
    Такого нет в примере когда создаем веб — сервис

    1. Жорик
  11. Сергей

    Огромное спасибо. Статья очень помогла. И еще одно, также огромное, спасибо за ссылку на Fiddler программа помогла выяснить, что ошибка не у меня в 1С, а что мне отправляют неправильные данные (ошиблись в ссылке).

  12. Gleb

    Вопрос по публикации web да и http сервисов 1с.
    Когда публикаю базу, (apache2 или iis) с анонимно

  13. Gleb

    Вопрос по публикации web да и http сервисов 1с.
    Когда публикую базу, (apache2 или iis) с анонимной аутентификацией веб сервера — все нормально, все работает.
    Но стоит мне закрыть веб-сервер паролем (базовая аутентификация — AuthType Basic) чтобы базу хоть немного защитить выпуская в нет — веб публикация работает, а любые http сервисы и даже ссылки в самой базе не отрабатывают.
    Простой пример — опубликовать типовую конфигурацию БК3, на титульной странице при запуске будет url с картинкой и ссылкой на учебное пособие. с аутентификацией веб-сервера — он эту картинку не покажет.
    Бился достаточно долго но пока не понял в чем дело. С такой аутентификацией сайты работают нормально. Возможно сама 1с не умеет так работать правильно.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: