Что это?
Сразу же хочу сказать, что этот проект нацелен на полноценную веб-разработку и не является экспериментом вида «во, глядите, вот так тоже можно». Мы настроены достаточно серьезно. Однако, на данном этапе развития - это очень маленькая ознакомительная версия, которая призвана заинтересовать энтузиастов от мира 1С, а также рассказать сообществу о предполагаемой модели веб-разработки для 1С.
Зачем?
Собственно, затем же, зачем был создан 1Script. Мне, как 1С-нику не нравятся никакие языки кроме 1С. (первая любовь C++ не забывается, конечно, но все проходит…)
В современном мире довольно часто нужно писать или сайты или веб-службы, которые должны жить в Сети и что-то отдавать человечеству в качестве результатов жизнедеятельности. Сейчас набросать что-то такое очень быстро можно на node.js и/или Python. Однако, есть проблема – я не умею. И мне гораздо приятнее сделать это на 1С.
Критерий успеха – любой 1С-ник двумя-тремя командами в консоли должен получить на диске «скелет» будущего веб-приложения, а затем одной-двумя командами разместить его в сети.
К делу!
Мне довольно сильно импонирует паттерн разработки веб-приложений в стиле MVC. Я знаю, что есть другие паттерны, есть случаи, когда он недостаточно хорош, тем не менее, я считаю, что по сочетанию «гибкость-простота-эффективность» - он один из лучших, предлагаемых для веб в данный момент.
В качестве «платформы», на которой построен веб-движок выступает ASP.NET Core MVC фирмы Microsoft. Это современная мощная штука с открытым исходным кодом и разрешительной лицензией. Платформа хороша сама по себе, а поскольку 1Script также разработан на стеке .NET, то выбор в сторону этой платформы является очевидным.
Проект веб-движка еще не имеет официального названия. Рабочий вариант – OSP.NET, который расшифровывается, как «OneScript Server Pages» и по звучанию отсылает к своему происхождению.
Пока проект развивается, я планирую периодически выпускать обучающие статьи, посвященные веб-разработке в 1Script. Статьи будут выходить по мере появления в движке той или иной функциональности. Одновременно статьи будут рассказывать про обобщенные штуки типа HTTP, MVC, Docker и прочее. Надеюсь, что получится что-то вроде книжки-пособия по 1Script.Web
Архитектура MVC
Название MVC расшифровывается, как model-view-controller и формирует все составные части и компоненты веб-движка. Архитектура mvc определяет все то, как движок устроен и как функционирует. Поэтому, для понимания устройства требуется для начала понять, что такое MVC в принципе.
Важно различать архитектурный паттерн MVC и его реализацию внутри ASP/OSP. Сам архитектурный паттерн не нов, его первые летописные упоминания исследователи относят к 1970 годам прошлого столетия. Однако, особую популярность он набрал с развитием веба в XXI веке н.э.
Ключевым в данном паттерне является четкое разграничение ответственностей компонентов. Я не буду подробно рассказывать о самом паттерне, а в особенности, рисовать тупую схему из трех квадратиков и стрелочек между ними, которых и так полно в сети. Материалов, поясняющих паттерн MVC предостаточно, и большинство из них – полный отстой. Не хотелось бы пополнять этот список своей статьей.
HTTP объясняет все
Почему MVC стал популярен с приходом веб? На мой взгляд, он очень хорошо отражает принципы взаимодействия по протоколу HTTP, которым живет Интернет. Протокол HTTP работает по схеме запрос-ответ и не хранит никакого состояния между двумя вызовами. Клиент спросил – сервер ответил. Все.
У HTTP-запроса есть 3 части: запрашиваемый ресурс, заголовки и тело запроса. У HTTP ответа также есть 3 части: статус ответа, заголовки и тело. Все, чем занимаются приложения, общающиеся по HTTP – это отсылают друг другу текстовые файлы вида:
GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
И получают в ответ файлы вида:
HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body>
</html>
Первой строкой запроса/ответа идет ресурс/статус соответственно. Далее, идет коллекция заголовков, каждый из которых представляет собой строку вида «Заголовок: Значение» Т.е. это обычное 1С-Соответствие, где ключ и значение отделены двоеточием, а элементы коллекции разделены переводом строк.
После заголовков следует одна пустая строка. Это знак, что заголовки кончились и дальше идет тело. Тело представляет собой ДвоичныеДанные, интерпретация которых зависит от самих приложений и того, как они написаны.
Таким образом, любое веб-приложение получает на вход вот такой вот файл, а дальше читает его, понимает и делает какие-то действия. После чего – отправляет клиенту файл с ответом. При чем тут MVC? При том, что в MVC-подходе очень удобно разделяются компоненты, которые отвечают за разбор входящего запроса и «понимание» что делать дальше, и компоненты отвечающие за то – что нужно отправить в качестве ответа. Между ними сидит «Модель», она же «бизнес-логика», она же «Конфигурация 1С».
Если еще проще, то веб-сервер, который получил запрос, отправляет его в «Контроллер», который понимает, как его обработать. Контроллер понимает, какое именно «Представление» должно сформировать ответ и вызывает это «представление». Полученный результат – отправляет клиенту.
Контроллер выполняет роль «точки входа» в запрос и выполняет диспетчеризацию вызова в нужную часть бизнес-логики. С появлением «контроллера» вся низкоуровневая байда по чтению и интерпретации http-запроса остается (инкапсулируется) внутри него и не затрагивает остальное приложение.
Формирование ответа
В качестве ответа мы можем отдавать любое двоичное содержимое. Чаще всего это html или (если это веб-сервис) – json, либо xml.
Ответ формируется внутри «действия» контроллера и возвращается клиенту.
Маршрутизация
Применительно к ASP, помимо контроллеров, представлений и моделей, система использует «Маршруты» (Routes). Маршрут – это правило, по которому принимается решение о том, как обрабатывать тот или иной запрос. Маршрут – это часть URL, находящаяся после имени сервера. Например, если в браузере вы запрашиваете страницу «http://mysite.com/users/list», то система будет использовать маршрут /users/list, в качестве правила диспетчеризации запроса.
Маршрут состоит из сегментов, разделенных символами косой черты “/”. В данном случае, у нас 2 сегмента – users и list. Наиболее распространённым способом маршрутизации является схема «controller/action/index?», в которой первому сегменту URL соответствует имя контроллера, второму – имя действия (команды) внутри контроллера, а третий необязательный параметр определяет параметр действия. Разумеется, возможны и другие схемы маршрутизации, это просто пример наиболее популярной схемы.
Структура приложения
Приложение состоит из 4 основных частей:
- Статическое содержимое (картинки, скрипты js, стили, и т.п.)
- Модуль приложения
- Контроллеры
- Представления
Статическое содержимое находится в каталоге wwwroot и на нем останавливаться не будем, это просто файлики, как есть.
Модуль приложения располагается в файле main.os. В нем выполняется вся необходимая инициализация и настройки маршрутов.
В папке controllers лежат, собственно, контроллеры, каждый из которых представлен модулем 1script. В папке views, как несложно догадаться, лежат представления (они же – шаблоны страниц), которые на данный момент не имеют каких-либо «облегчающих жизнь 1С-ника» плюшек. Это в чистом виде шаблоны Razor от фирмы Microsoft. В дальнейшем планируются исследования на эту тему, но пока имеем, что имеем. Шаблоны Razor довольно мощные, просто их писать надо не на 1С. С другой стороны, за счет разделения ответственностей в архитектуре MVC, в шаблонах и не требуется какой-то особенной логики.
Развертывание и запуск
Поскольку на дворе XXI век, то приложения поставляются и устанавливаются сразу вместе со своей операционной системой. Называется все это контейнером и гуглится по словам «docker», «красноглазие», «linux» и «у меня ничего не работает».
Нужно скачать архив из данной статьи, распаковать его куда-нибудь, затем зайти в консоль, перейти в каталог, в который распаковали и выполнить «docker build –t demoapp .» Точку в конце не забываем.
Чуть не забыл. Если у вас на машине нету докера, то вам нужно его себе поставить. Сразу на винду или внутрь виртуальной машины. Поскольку впереди долгие праздники и вам наверняка нужно будет чем-то себя занять, то я не сейчас буду расписывать как это делать. Скажу только, что это не очень сложно, а на инфостарте есть даже подробнейшая инструкция от @pumbaEO.
К сожалению, теперь нельзя положить в статью бесплатный файл, поэтому, если кому совсем лень поддержать автора - тот же самый архив можно скачать с github в моем аккаунте.
В результате, у вас должен будет получиться вот такой вот веб-сайт:
На этом, вводная статья в веб-разработку на языке 1С заканчивается. Когда отгремят каникулы, я уже более вдумчиво и серьезно расскажу по порядку как все устроено, как настроить среду разработки, виртуалки-шмиртуалки и прочее. Мы сделаем полноценный сайт, а по мере развития движка будем его усложнять и усложнять.
С наступающим Новым Годом, друзья!