Знакомимся с HTTP-сервисами в OneScript

25.11.19

Разработка - OneScript

В статье описан механизм HTTP-сервисов в OneScript, а также приведен пример интеграции и совместной работы с 1С:Предприятие

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
HTTP-сервисы в OneScript. Знакомство:
.zip 4,39Mb
24
24 Скачать (1 SM) Купить за 1 850 руб.

Введение

Начиная с версии 1.0.19, в среде OneScript, появился экспериментальный механизм http-сервисов. Он является аналогом механизма http-сервисов в 1С:Предприятие и позволяет взаимодействовать со средой OneScript по протоколу http практически также, как это происходит в среде 1С:Предприятие.

По сути – это классическое приложение (сайт) ASP.NET, с возможностью исполнения кода, написанного на языке 1С, в среде OneScript.

Для чего это может быть использовано

В отличие от технологии (//infostart.ru/public/722160/), которая ориентирована на полноценную веб-разработку, механизм http-сервисов скорее ориентирован на быстрое создание небольших сервисов, которые являются неким промежуточным звеном, между пользователем/внешним сервисом и информационной системой на базе 1С:Предприятие, в тех случаях, когда непосредственное использование средств платформы неудобно или невозможно по каким-либо причинам.

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

Описание сервиса и логика работы

Итак, нам необходимо реализовать сервис самостоятельного восстановления доступа в информационную базу для внешних пользователей. В качестве образца, используем сервис восстановления доступа, который реализован на сайте Инфостарт. Логику его работы можно описать примерно следующей последовательностью действий:

  1. Пользователь, забывший пароль переходит по ссылке “Забыли пароль”
  2. В появившуюся форму ввода, пользователь вводит идентификационные данные (в нашем случае – это имя пользователя ИБ и адрес электронной почты).
  3. Пользователь нажимает кнопку Создать запрос и идентификационные данные поступают на вход сервиса.
  4. Сервис проверяет правильность данных (существует ли такой пользователь, активен ли он), а также допустимость создания запроса на сброс пароля (как пример - защита от перебора и создания множества валидных запросов).
  5. В случае успеха, сервис создает запрос на сброс пароля в информационной базе и сообщает об этом пользователю. Пользователю отправляется сообщение с кодом или ссылкой для подтверждения запроса. В случае, невозможности создания запроса выдается сообщение об ошибке. Запрос должен действительным ограниченный промежуток времени.
  6. Пользователь переходит на страницу подтверждения, ссылка на которую отправляется пользователю и вводит код подтверждения.
  7. Пользователь нажимает на кнопку Подтвердить и код подтверждения поступает на вход сервиса.
  8. Сервис анализирует допустимость кода подтверждения и в случае успеха, сбрасывает пароль соответствующего пользователя. Новый пароль отправляется пользователю по электронной почте или телефону.

Выбор технологии для реализации

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

  1. Только штатные средства платформы - http-сервисы. Недостатком данного подхода является сложность защиты от DDoS атак и как следствие – возможное снижение производительности работы для внутренних пользователей.
  2. Использование отличных от 1C технологий, таких, как php, asp.net, OneScript или других, совместно со средствами платформы.

В настоящей статье, мы остановим свой выбор на OneScript, поскольку для человека, программирующего на 1С она имеет наименьший порог вхождения.

Реализация

Поскольку в настоящее время OneScript не поддерживает отладку для web-приложений, а программирование в блокноте и отладка через Сообщить не наш метод J, реализуем сервис с использованием только штатных средств платформы, а затем перенесем его в OneScript.

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

Описание конфигурации и особенности реализации

Для простоты, справочник ВнешниеПользователи содержит имя пользователя информационной базы, а также адрес электронной почты.

Все функции и процедуры, реализация которых одличается для OneScript и 1С (работа с макетами, работа с информационной базой), для простоты вынесены в общий модуль ПлатформозависимыеOneScript.

Для простоты, обновление данных об активных пользователях в локальной бд сервиса реализовано в ручном режиме.

Не реализована отправка сообщений электронной почты. Для подтверждения запроса берем код подтверждения из соответствующего документа.

Для упрощения миграции Имена обработчиков http-сервисов изменены на предопределенное имя

ОбработкаВызоваHTTPСервиса .

Для упрощения миграции корневые url сервисов соответствуют именам файлов os.

Перенос сервиса на OneScript

Документацию по установке и использованию http-сервисов в OneScript можно посмотреть по следующим ссылке: https://github.com/EvilBeaver/oscriptiocontent/blob/master/markdown/docs/ht­tp.md

Поскольку в подавляющем большинстве случаев, в качестве клиентской операционной системы у пользователей является ОС Windows, в дальнейшем, будет рассмотрена установка и настройка именно для этой ОС.

Предварительные условия

На компьютере должен быть установлен .NET Framework, версии не ниже 4.5.2

На компьютере должна быть установлен IIS или IIS Express.

На компьютере должна быть установлена платформа 1С:Предприятие, версии не ниже 8.3.5. (Не относится к OneScript, необходимо для работы с демо-базой).

Демонстрационная база и веб-сервисы должны быть опубликованы на IIS с именами chpwddb и chpwd соответственно (Не относится к OneScript, необходимо для работы с демо-базой).

Создание web-приложения OneScript

Поскольку http-сервисы OneScript представляют собой обычный сайт/web-приложение ASP.NET, первым делом необходимо создать web-приложение.

Скачиваем zip архив с сайта http://oscript.io/.

В IIS Manager создаем web-приложение, примерно как описано здесь: https://metanit.com/sharp/mvc/13.2.php (до момента работы с Visual Studio). В процессе В поле псевдоним вводим onescript (может быть любое имя в зависимости от ваших потребностей), в поле Физический путь создаем и выбираем папку приложения (в нашем случае onescript), Выбираем классический пул приложений ASP.NET 4.0 или ASP.NET 4.5. и нажимаем ОК.

В папке приложения (для IIS – это c:\inetpub\wwwroot\onescript, для IIS express что-то вроде C:\Users\<username>\Documents\IISExpress) создаем папку Bin. Копируем в нее все dll из скачанного архива.

В папке приложения создаем файл web.config, примерно следующего содержания:

<configuration>

  <system.web>

    <httpHandlers>

      <add verb="*" path="*.os" type="OneScript.ASPNETHandler.ASPNETHandler, ASPNETHandler"/>

    </httpHandlers>

    <customErrors mode="Off"/>

  </system.web>

  <system.webServer>

    <handlers>

      <add name="OneScript" path="*.os" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="File" preCondition="classicMode,runtimeVersionv4.0,bitness64"/>

      <add name="OneScript32" path="*.os" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="File" preCondition="classicMode,runtimeVersionv4.0,bitness32"/>

    </handlers>

   </system.webServer>

  <appSettings>

    <add key="CachingEnabled" value="true"/>

  </appSettings>

</configuration>

 

Наше приложение готово.

Создаем в папке приложения файл hello.os примерно следующего содержания:

// Предопределенная функция. Является точкой входа в обработку запроса.

Функция ОбработкаВызоваHTTPСервиса(Запрос) Экспорт

 

      Ответ = Новый HTTPСервисОтвет(200);

          Ответ.УстановитьТелоИзСтроки("Hello World!");

          Возврат Ответ;

КонецФункции

Тестируем приложение, набрав в строке браузера http://localhost/onescript.hello.os. Если все настроено верно, будет выведено соответствующее сообщение.

Добавление внешних библиотек

Для хранения данных о пользователях и запросах наше приложение нуждается хранилище данных, по аналогии с информационной базой. Для работы с СУБД, в OneScript есть прекрасная библиотека  //infostart.ru/public/672461/, которую мы и будем использовать. В демо-примере используется СУБД SQLite, однако библиотека поддерживает и другие распространенные СУБД.

Для получения бинарных файлов библиотеки я скомпилировал исходные файлы, которые взял с github (https://github.com/ret-Phoenix/oscript-sql). Возможно у автора есть возможность для загрузки бинарных файлов.

Полученные dll копируем в папку Bin нашего приложения и редактируем web.config добавив в секцию <appSettings> нижеследующую зпрись:

<add key="sql" value="attachAssembly" />

Где sql – имя dll без расширения (sql.dll – корневая dll библиотеки), значение attachAssembly – говорит о том, что необходимо загрузить dll при старте приложения.

Таким образом, после старта, из нашего кода будут доступны типы, предоставляемые этой библиотекой без использования директивы #Использовать и мы сможем использовать их в своем коде.

Для нашего примера, в папке приложения создадим подпапку db, которая будет использоваться для хранения локальной базы данных и дадим пользователю IUSR права на запись в эту папку.

Добавление внешних модулей

Еще одной возможностью является загрузка при старте локальных библиотек, которые представляют собой os файлы, имеющие формат общих модулей 1С:Предприятие. Их использование аналогично использованию общих модулей в платформе. Имена общих модулей в коде, соответствуют именам файлов os.

В нашем случае, в папке приложения создадим подпапку modules, где будут располагаться наши “общие модули”. Отредактируем файл web.config, добавив в секцию  <appSettings> нижеследующую зпрись:

<add key="commonModulesPath" value="~/modules/" />

 Где ~/modules/ - виртуальный путь к папке, где расположены файлы модулей.

При загрузке приложения, будут скомпилированы и загружены все файлы os, находящиеся в этой папке.

В нашем демонстрационном примере, мы перенесем в OneScript четыре общих модуля из конфигурации. Для этого создадим в паке modules четыре файла с именами КонфигурацияOneScript.os, ОбщиеФункции.os, ПлатформозависимыеOneScript.os и СлужебныйOneScript.os.

Поместим содержимое общих модулей из конфигуратора в соответствующие файлы и сохраним их. В файле ПлатформозависимыеOneScript.os Закомментируем код, который предназначен для работы в 1С и разкомментируем код, который предназначен для работы в OneScript.

Включение лога загрузки

Для определения проблем, при загрузке внешних библиотек и модулей можно включить лог загрузки, где будут отображаться все ошибки при загрузке “общих модулей” и внешних dll. Это можно сделать, добавив в web.config в секцию <appSettings> нижеследующую запись:

<add key="LogToPath" value="~/db/"/>

 Где ~/db/ - виртуальный путь к папке логов. Пользователь от имени которого выполняется web-приложение должен иметь права на запись в эту папку.

Для нашего примера – это ранее созданная папка папка db.

Ну вт в общем то и все, что касается возможностей, развертывания и настройки http-сервисов OneScript. Осталось проделать несколько операций, специфичных для демонстрационной базы.

Добавление шаблонов веб-страниц

В папке web-приложения создадим подпапку templates. В этой папке создадим два файла СоздатьЗапрос.ospt и подтвердитьЗапрос.ospt в соответствии с именами соответствующих макетов в конфигурации. Перенесем содержимое макетов в соответствующие файлы и отредактируем значения action соответственно на action=createrequest.os и action=confirmrequest.os . Данные файлы содержат html код наших страниц.

Добавление сервисов создания и подтверждения запросов

В папке web-приложения создадим файлы createrequest.os и confirmrequest.os. Перенесем в них содержимое соответствующих http сервисов из конфигуратра и сохраним файлы.

Добавление сервиса обновления данных о пользователях

В папке web-приложения создадим папку services. В продуктивных средах, лучше дать ей сложное название типа строкового представления GUID, для исключения доступа к служебным сервисам извне.

В этой папке создадим файлы updatelogin.os и createdb.os. Поместим в файл updatelogin.os содержимое обработчика соответствующего http-сервиса из конфигурации и сохраним файл. Поместим в файл created.os содержимое соответствующего общего модуля, предварительно раскомментировав его и сохраним файл.

Из браузера выполним создание БД и таблиц, набрав http://localhost/onescript/services/createdb.os. В папке db появится файл local.db.

Заключение

Ну вот собственно и все, наш демонстрационный сервис развернут и готов к работе.

В заключении хочу отметить, что на мой взгляд, механизмы http-сервисов в OneScript могут вполне успешно использоваться для создания небольших сервисов в информационных системах, построеных на платформе 1С:Предприятие, с минимальными усилиями на изучение неизвестных технологий и освоение новых средств разработки.

С более продвинутой методикой использования http-сервисов, позволяющей автоматизировать многие "ручные" операции можно познакомиться в этой статье.

См. также

OneScript Программист Бесплатно (free)

Отгремел Infostart Tech Event 2024, топовое событие в мире 1С-разработки, традиционно проходящее в Санкт-Петербурге. Ваш покорный слуга в этот раз отмечал там 10-летний юбилей проекта OneScript. Отмечание проводилось в форме игры-соревнования по забегу роботов в лабиринте. Участники пытались написать алгоритм движения робота на языке 1С и сделать это быстрее других. О том, как это было – под катом.

28.10.2024    1400    Evil Beaver    11    

24

OneScript Программист Бесплатно (free)

OneScript – это скриптовый движок для автоматизации всего и вся. О том, как OneScript помогает в разработке скриптов на языке 1С, пойдет речь в статье.

10.10.2024    2323    ardn    1    

6

Инструментарий разработчика OneScript Программист Руководитель проекта Бесплатно (free)

Все мы хотя бы раз работали с конструктором запросов. Результатом его работы является синтаксически верный запрос, оформленный по некоторому стандарту. Нравится - не нравится, а привыкаешь быстро, и на запрос, написанный руками, уже не хочется смотреть... А почему бы не попробовать сделать то же самое с исходным кодом 1С? Ну я и попробовал...

23.09.2024    608    0    stopa85    4    

5

Групповая разработка (Git, хранилище) OneScript Программист Платформа 1С v8.3 Бесплатно (free)

Скрипт для работы с SonarQube и локальным репозиторием Git.<br> Цель проекта – возможность выполнить быструю проверку качества кода перед тем, как помещать доработки в рабочее хранилище. В Sonar и Git выгружается не вся конфигурация, а только объекты из заданного списка.<br> https://github.com/vkrivov/go/

02.07.2024    3496    vkrivov@yandex.ru    8    

19

DevOps и автоматизация разработки OneScript Системный администратор Программист Стажер Бесплатно (free)

Рассмотрим создание самоформирующейся документации через комментарии и соглашения: как это сделать и зачем, с описанием полного цикла от исходников конфигурации до странички в интернете

17.06.2024    5199    bayselonarrend    5    

61

OneScript Программист Стажер Бесплатно (free)

Поговорим про меню, спиннеры, прогресс-бары и прочие свистелки для CLI приложений на OneScript

20.05.2024    2902    bayselonarrend    18    

70

Групповая разработка (Git, хранилище) OneScript Системный администратор Программист Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    2618    bayselonarrend    3    

42

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    5413    kamisov    23    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1563 16.01.18 11:27 Сейчас в теме
(0) Хорошая публикация.

Спасибо и за реализацию HTTP в OneScript, и за статью!
2. acsent 1203 16.01.18 12:22 Сейчас в теме
Пора уже свою CMS на 1с писать )))
3. nixel 1433 16.01.18 12:58 Сейчас в теме
Как how-to статья хорошая, но на мой взгляд не хватает картинок внутренностей сервисов. Из описания понятно, что есть некая база, в ней есть некие описанные сервисы, некие макеты, (еще и документ какой-то?) но без скачивания и ковыряния в конфе понять что конкретно происходит тяжеловато.

Возможно стоит добавить некоторое количество gif с демонстрацией работы сервиса и сами скриншоты "кишок" конфигурации.
4. acsent 1203 17.01.18 10:19 Сейчас в теме
(3) так вроде не база 1с, а просто скрипты на OneScript
5. blackhole321 1314 17.01.18 10:37 Сейчас в теме
6. blackhole321 1314 17.01.18 11:31 Сейчас в теме
(3)Добавил скриншоты с конфигурацией и переносом. Так пойдет?
7. blackhole321 1314 17.01.18 11:35 Сейчас в теме
Обнаружил ошибку в скрипте создания БД.
Вместо:
Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.СтрокаСоединения = "Data Source=" + ПолучитьФизическийПутьИзВиртуального("~/db/localdb.db;") + "PRAGMA journal_mode=WAL;Version=3;";
Соединение.Открыть();
Должно быть:
СредстваHTTP = Новый СредстваHTTP;
Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.СтрокаСоединения = "Data Source=" + СредстваHTTP.ПолучитьФизическийПутьИзВиртуального("~/db/localdb.db") + ";PRAGMA journal_mode=WAL;Version=3;";
Соединение.Открыть();
В архиве поменял. Тем, кто скачал могу перевыслать архив с этим исправлением.
8. vlad3190 26.01.18 13:42 Сейчас в теме
При установке на Windows 7 (IIS Express) x64, выскочила ошибка:
"Ошибка HTTP 404.2 - Not Found Запрашиваемая страница не может быть отображена из-за применяемых на веб-сервере настроек списка ограничений ISAPI и CGI."

После ковыряний и гугления, помогла статья http://winitpro.ru/index.php/2012/05/24/nastraivaem-iis-7-5-dlya-raboty-s-asp-net-4-0/. Как оказалось, отсутсвовали разрешения на выполнение модулей isapi, которые прописаны в web.config. По всей видимости это может быть связано с тем, что .net framework нужной версии, я устанавливал после установки iis express.
9. alex_vert 31.05.19 09:52 Сейчас в теме
Первый раз работает, потом выскакивает сообщение:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
10. blackhole321 1314 31.05.19 09:56 Сейчас в теме
11. alex_vert 31.05.19 17:07 Сейчас в теме
12. blackhole321 1314 31.05.19 17:12 Сейчас в теме
13. alex_vert 31.05.19 17:13 Сейчас в теме
(12)последняя с сайта OneScript-1.0.21.zip
14. blackhole321 1314 31.05.19 17:14 Сейчас в теме
(13)Ну тогда наверное что-то сломалось опять.
Я делал для 19, потом правил баги в 20. Что в 21 - не смотрел.
Для Вас принципиально 21?
15. alex_vert 31.05.19 17:14 Сейчас в теме
Еще есть ошибка в публикации нужно набирать не http://localhost/onescript.hello.os а http://localhost/onescript/hello.os
16. ktb 629 14.10.19 14:49 Сейчас в теме
А как подключать библиотеки oscript (#Использовать <имя библиотеки>)? Ругается "Библиотека не найдена" :-( Как указать путь к каталогу библиотек? Пробовал разместить в bin файл oscript.cfg, не помогло!
17. user863354 16.10.19 12:39 Сейчас в теме
Добрый день! А веб-форму с полями Пользователь и Электронная почта где создавали? В OneScript?
18. blackhole321 1314 16.10.19 12:45 Сейчас в теме
(17)Формы - это обычные html-страницы (или шаблоны на основе html-страниц). Могут создаваться где угодно, хоть в текстовом редакторе. Отдаются клиенту OneScript'ом.
19. user863354 16.10.19 13:09 Сейчас в теме
У меня стоит задача - создать простую форму с полями: возраст, ежемесячный доход, стаж работы, e-mail. Форма открывается по ссылке, пользователь заполняет форму и нажимает кнопку Отправить, после чего заполненные данные передаются в 1С, где происходит небольшой расчет и отправка отчета, например, о предварительной кредитоспособности физлица, на указанный e-mail. Как посоветуете это сделать?
20. user863354 16.10.19 13:20 Сейчас в теме
(19) и еще вопросик: могу ли я создать нужную мне веб-страницу с использованием Вашей каркасной конфигурации https://infostart.ru/public/841785/?
22. blackhole321 1314 16.10.19 13:40 Сейчас в теме
21. blackhole321 1314 16.10.19 13:40 Сейчас в теме
(19)
У меня стоит задача - создать простую форму

Во внутренней сети предприятия?
Сколько пользователей?
23. user1284675 21.06.22 15:13 Сейчас в теме
Добрый день, подскажите, каким способом подключить библиотеку onescript, а именно irac если она состоит не только из общих модулей, но и модулей классов, перечислений?
При подключении как #Использование irac или #Использование "абсолютный путь irac" выдает библиотека не найдена, хотя доступов у пользователя IIS точно достаточно.
24. blackhole321 1314 22.06.22 12:58 Сейчас в теме
(23)
При подключении как #Использование irac или #Использование "абсолютный путь irac" выдает библиотека не найдена, хотя доступов у пользователя IIS точно достаточно.

Добрый день!
#Использовать - не работает в http сервисах. Надо либо подключить необходимые классы в web.config, либо сделать их обработками и опять таки подключить их через web.config
25. user1284675 23.06.22 08:15 Сейчас в теме
(24) Доброе утро! Спасибо за ответ, а можете подсказать, как тогда быть с библиотеками типа irac? У нее не только модули классов, но и общие модули и макеты. Нужно дерево папок в modules добавлять и подключать в web.config? у меня не взлетело, приложение так не видит библиотеку.
27. blackhole321 1314 23.06.22 11:42 Сейчас в теме
(25)Тут к сожалению не подскажу, это надо смотреть разбираться.
26. user1284675 23.06.22 08:54 Сейчас в теме
и также можете еще пояснить, что в данном случае значит сделать обработками?
(24)
28. blackhole321 1314 23.06.22 11:44 Сейчас в теме
Оставьте свое сообщение