Сайт на Delphi

Сайт на Delphi

Сайт на Delphi — одна из самых интересных тем была когда то в далекие времена, когда Delphi был мега популярным. Однако по мере падения популярности среды разработки, интерес создания на нем сайтов не то что уменьшился, а практически снизился до нуля. А между прочим зря!

Уже тогда, в далекие времена, когда был популярен Delphi 7, он обладал развитыми средствами для создания Backend. А входящая в Delphi 7 библиотека (сейчас мы называем это Framework) IntraWeb позволяла облегчить эту задачу. Конечно этот framework был еще в зачаточном состоянии, но ведь сайт вполне можно было написать и без него, применяя для разработки Frontend — HTML, а для Backend — Delphi. Помимо этого, в далекие времена начала двухтысячных годов требования к дизайну сайтов еще не были столь высоки.

В то время существовали уже и развитые web-сервера Apache и IIS и можно было для этих серверов писать web-расширения как по стандарту протокола CGI, так и по стандарту протокола ISAPI. А можно было даже использовать ASP (тогда еще не .NET-версия). И все эти средства были отлично развиты. То есть, можно было использовать разработанный проект практически в любом хостинге.

Но Delphi — эта платная среда разработки. И не просто платная, а стоила она больших денег, как и сегодня впрочем. Lazarus еще не существовал, версия community не существовала также, поэтому многие разработчики по всему миру стали применять бесплатные средства создания сайтов.

И наверное даже роковую роль для Delphi сыграла не только падение популярности и определенные неудачные версии (они есть у всех разработчиков ПО). Скорее всего отрицательным моментом стала большая стоимость. И именно поэтому язык стал менее популярным. То же самое было и с продуктами от Microsoft. У них ведь была и есть ASP и средства разработки web-приложений. Но эти средства, не смотря на мощный арсенал, до настоящего времени не были популярными, как я считаю, в виду большой стоимости этих средств.

Но спустя долгие годы, Embarcadero (нынешний владелец Delphi) и Microsoft стали распространять свои программные продукты по лицензии сommunity, но уже 80% рынка ведут разработку на PHP и Python. Хотя сейчас и другие языки в области Backend также востребованы и набирают популярность.

Но речь у нас пойдет здесь именно о Delphi — среде которую необдуманно не дальновидные (так я их называю) недопрограммисты не раз пытались унизить, опозорить и даже наверное нанять киллера, чтобы навсегда убрать этот язык с глаз долой. Конечно для этого свою лепту внесла и компания Microsoft. Видимо в этой компании действительно грамотные специалисты и они видели, что Delphi — это действительно серьезный конкурент и не хотели его развивать. А надо было. Надо было его в свое время выкупить и развить, как это сделала Embarcadero, ведь все-равно на рынке появилась масса других конкурентов и тот же Delphi, хоть и далеко не лидирующий по рейтингам, но он активно развивается. И именно на нем, на языке, который плетется где-то в хвосте рейтингов среди сверхновомодных языков можно писать потрясающие web-приложения, настольные приложения, а также мобильные для разных платформ.

Почему мы выбрали сегодня такую тему? Просто потому, что по разным оценкам более 90% коммерческих систем применяют web-технологии в качестве универсальной парадигмы своего развития. Это связано с развитием сети Internet, с растущей глобализацией бизнеса, потому что, люди предпочитают в настоящее время осуществлять определенные вещи именно через web-приложения, web-сайты. Но у реализации таких проектов есть определенные особенности.

Казалось бы, что здесь такого, у нас ведь все-равно визуальный стиль программирования. Delphi позволяет создавать сложнейшие нативные приложения, код которых напрямую выполняется центральным процессором, а графическая обработка выполняется графическим процессором. Так почему же именно Web на Delphi? Ну просто потому, что очень многие люди в свое время мечтали о том, что они сделают один раз приложение в каком то центральном месте и централизовано его разместят, предоставят возможность для подключения к этому приложению, а в качестве клиентского ПО не нужно будет ничего устанавливать. И когда человек пришел на другое место — ему нужно знать только одно: как подключиться через web-браузер к web-серверу, где находится эта централизованно расположенная программа.

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

В данной статье будет рассказано о возможностях Delphi в плане построения сайта, но такие возможности есть и в C++ Builder.

Web-сайты и web-приложения

Конечно в таком определении мое мнение — это не последняя инстанция.

Web-приложение является клиент-серверным приложением, у которого пользовательский интерфейс (клиентская часть) работает через браузер.

Сайт очень похож на web-приложение, если речь идет о динамическом сайте. То есть, по сути, любой блог, интернет-магазин и прочий сайт, функционирующий на движке WordPress или любом другом является динамическим. Значит он является web-приложением. А почему нет? Backend-код написан на PHP.

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

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

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

Очень многие компании перешли к такой концепции работы тонких web-клиентов (имеется ввиду от десктопных приложений к web-приложениям) не смотря на определенные сложности, которые сейчас становятся все более и более очевидными.

Прежде всего, мы очень сильно зависимы от сети, от того, чтобы вообще было соединение с сетью. Некоторые компании развертывают собственный интернет в рамках предприятия, называя это Интравебом или Интранетом.

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

Практически 90% кода выполняется на стороне сервера и за счет этого можно использовать очень тонкий клиент, который работает везде, вне зависимости от дальности нахождения web-сервера, зависит только от скорости работы линий связи, а также от того, на сколько web-брайзер соответствует стандартам, которые приняты в настоящее время в совете по стандартизации веба.

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

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

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

Web-фреймворки для Delphi

Delphi поддерживает следующие платформы:

  • Windows 32/64 разрадная;
  • Android;
  • iOS;
  • MacOS;
  • Linux.

Поддержка Linux является достаточно существенным пунктом в разработке, потому что очень многие пользователи в ранних версиях Delphi жаловались, что web-сервера расположены на платформах Linux или Unix, а web-приложения работали только в среде Windows, и к сожалению web-сервер можно было использовать только один, который работает в среде Windows.

С другой стороны поддерживаемые Delphi браузеры многочисленные и практически покрывают все возможности, которые имеются сейчас на различных платформах и о операционных системах.

Фреймворки, которые включены в состав Rad Studio (Delphi и C++ Builder) представлены в виде библиотек и поставляются отдельно. Предназначены они для того, чтобы облегчить работу с web-технологиями разработчику. То есть — это как и всегда уже имеющиеся заготовки в виде классов, функций/процедур.

Эти фреймворки поддерживают все стандарты, которые приняты сейчас в мире web-технологий, такие как: HTTP, HTML, JavaScript, CSS, ISAPI, CGI и т.д.

С Delphi же поставляются такие библиотеки как Indy, которая обеспечивает работу с web-протоколами, визуальный фреймворк IntraWeb, не визуальная библиотека, WebBroker (собственная разработка), набор компонентов для работы с REST технологией (REST протоколом) — REST Client Library и DataSnap REST Servers.

Стек web-технологий, представлен на рисунке ниже. Конечно же этот стек не ограничивается этой картинкой, но выглядит примерно так:

Стек Web-технологий
Стек Web-технологий

На стороне сервера, удаленно имеется хранилище с данными. Сервер может выдавать HTML-документы и некие специальные формы представления информации XML, JSON и т.п.

Для того, чтобы получить от клиента запрос и обработать его, а после обработки запроса с указанными ему параметрами передать клиенту найденные и преобразованные по просьбе клиента данные, либо в виде отдельных наборов представления информации, либо HTML-документа, нужно обеспечить определенный функционал (бизнес-логику) для обработки на стороне сервера. Здесь поддерживаются такие технологии как CGI и ISAPI. Web-сокерты поддерживаются в отдельных библиотеках.

С точки зрения клиента пользователь работает через web-брайзер. Web-браузер умеет работать только со страницами в формате HTML или с представлениями данных, которые браузер обертывает в HTML-формат.

При этом можно спокойно кастомизировать внешний вид приложения через стили, а также управлять логикой перехода страниц прямо в браузере (одностраничные (SPA) приложение), которые умеют это делать очень хорошо. Более того, за счет некоторых стандартных API мы можем стандартизировать и автоматизировать представления этих страниц на стороне клиента.

В основном клиент общается с web-сервером, который передает запросы на обработку функциональным модулям расширения на стороне сервера через протокол HTTP/HTTPS.

В качестве клиента не обязательно может быть использован браузер. Вполне может быть иной вариант программы. Это могут быть нативные программы, написанные на Delphi или любых других языках программирования. Также это могут быть гибридные приложения, которые, с одной стороны, по сути являются наивными приложениями для той или иной платформы, а по факту, они либо вызывают локальный Web-брайзер и используют его возможности, либо используют те модули, которые отвечают за обработку документов в формате HTML для того, чтобы в том же самом режиме, в котором это делает web-браузер интерпретировать программные скрипты и тем, самым представляя информацию пользователю.

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

Кjнечно чистый web-браузер, который не является специализированным для, например, Android, вряд ли будет иметь доступ к аппаратным ресурсам по соображениям безопасности.

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

Что же можно делать на Delphi? Во-первых, на Delphi можно создавать web-сервер, либо в виде отдельно стоящего модуля, либо в виде плагина для тех стандартных web-серверов, которые работают на всех платформах. Функционал, который работает на стороне сервера поддерживает различные архитектуры и протоколы.

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

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

Разработка web-клиентов

Что представляет из себя клиент для браузера?

  • это прежде всего HTML (пятый на данный момент) для формирования и показа контента. Язык разметки гиппертекста;
  • XML — формат обмена информацией, который в настоящее время широко используется. Он хорош тем, что он очень корректен и всегда можно проверить корректность его синтаксиса. Он используется в качестве стандарта для описания API-интерфейсов для автоматизации работы;
  • JSON — JavaScript Object Notation — формат, аналогичный XML. В противовес XML передача данных, для приложения которое обменивается не страницами HTML, а только конкретными пользовательскими данными принято использовать JSON, который аналогичный по функциональности XML, но проще в использовании и читабельнее;
  • CSS (3 версия) — каскадные таблицы стилей, являющиеся основным средством кастомизации HTML-документа. С помощью данных таблиц можно придать web-документу совершенно любой внешний вид;
  • JavaScript — самый популярный язык в мире (в настоящее время). Он достаточно хорошо развит. Несмотря на определенные тонкости и недостатки, которые в него заложены изначально, он теперь расширяется до таких стандартов, которые позволяют создавать компонентные многоразовые фрагменты кода, включает в себя средства автоматизации и тестирования, проверки программного кода, динамических изменений и так далее. Изначально язык был предназначен для разработки frontend части приложения, то есть для клиентской части. Сейчас же этот язык развился до такой степени, что с помощью него можно спокойно и эффективно разрабатывать backend, то есть программную логику на сервере и при этом не применять другие языки, такие как Python, PHP, C# или Delphi.

Фреймворки для Frontend

Когда мы говорим о том, что мы делаем сайт или web-приложение в рамках Delphi, мы привыкли к тому, что в разработке очень сильно помогает визуальное программирование.

На самом деле, если мы способны создать серверную часть, то было бы не плохо с помощью Delphi создавать и клиентскую часть. Но здесь возникают определенные вопросы в виду того, как это должно быть реализовано. Разработка пользовательского интерфейса для сайта или web-приложения должна происходить в визуальном режиме, то есть с помощью определенных визуальных компонент и при этом разработка не должна требовать тонкостей разных вариантов реализации HTML, CSS, JavaScript, настройки на разные браузеры и т.п.

Должны быть какие то специальные средства, которые позволяют скрыть от пользователя всю эту внутреннюю «кухню» и ее сложность.

Поэтому, как правило, для таких библиотек используется некий презентационный уровень. То есть, сервер, на котором работает приложение выдает не совсем HTML-страницу, а некое описание этой HTML-страницы, которая должна быть предоставлена пользователю. Описание это, как правило, в виде тех компонент и их свойств, которые описаны при визуальном программировании, а некая служебная часть приложения (презентационный уровень) интерпретирует это в HTML-код и код JavaScript.

Ну то есть, если рассматривать по аналогии с VCL, то у него такой файл называется .dfm. В нем как раз описывается внешний вид формы.

Более того, можно довольно эффективно сочетать клиентские приложения, созданные с помощью популярных фреймворков (React.js, Node.js, Angular.js, Vue.js, Sencha Ext JS и т.д.) и серверную часть, сделанную да Delphi.

Но для системы Delphi есть фреймворки для разработки клиентских частей. Это IntraWeb (сейчас уже достаточно мощная для того, чтобы сказать, что она «сырая»), UniGui (у которой под капотом, кстати Sencha Ext JS. То есть, это определенная оболочка для Sencha Ext JS), TMS Web Core и многие другие.

В основном идея у них одна и та же. используется некая библиотека. На форме, в визуальном режиме создается подобие web-страницы, затем к этой странице подключаются стили через обычную таблицу стилей CSS и в результате компиляции мы получаем стилизованный HTML-документ.

При использовании фреймворка TMS Web Core, например, компиляция осуществляется в JavaScript. То есть, смотрите, как интересно... При классической компиляции мы получаем файл .exe, а при компиляции web-приложения мы из того же Delphi-кода получаем файлы .js. Ну и соответственно, приложение уже выполняется на напрямую в Windows, а через браузер. Причем этому приложению можно придать вид обычного оконного приложения, к которому мы привыкли, но запускаться оно будет в браузере или же можно сделать приложение в виде сайта. Внешний вид уже, как говорится, будет зависеть от предпочтения заказчика или разработчика.

Другой популярный вышеупомянутый фреймворк IntraWeb, называемый «VCL для Web». Эта библиотека фреймворка полностью соответствует визуальным компонентам VCL, к которым привыкли все разработчики десктопных приложений Delphi.

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

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

Хотелось бы отдельно высказаться по поводу платных лицензий относительно фреймворков. Классически программисты пользуются бесплатными продуктами и средами разработки, а также бесплатными фрейворками для разработки сайтов и web-приложений.

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

Но а если вы только планируете обучение по подобным продуктам, то во всех фреймворках имеется бесплатная версия, которую можно всегда испытать и понять, подходит вам этот продукт или нет. А лучше всего не торопиться и изучить в этом направлении несколько технологий и затем попробовать в деле 2-4 подобных продукта. И тогда уже точно будет ясно, что для вас больше всего подходит.

Вот, например, возьмите меня. Есть ведь 1С, он популярный. Но не нравится он мне, как язык и среда программирования. А вот непопулярный в наше время Delphi является моей любимой средой. Даже С#, близкий по духу к Delphi все равно для меня не является чем то вдохновляющим. Хотя я понимаю, что количество заказов на C# гораздо больше. Так и у вас, понравится какая то одна из технологий, а может быть две или три. А может быть даже ни та и ни другая...

Если у вас есть потребность перевести VCL-приложения в web, то IntraWeb — это библиотека, которая поможет вам это сделать практически в автоматизированном варианте.

Эта библиотека поддерживает дополнительные визуальные и не визуальные компоненты различных компаний. Так же фреймворк достаточно хорошо документирован с имеющимися примерами, которые можно использовать в своих проектах.

Еще одна мощная технология, предназначенная для разработки web-приложений называется UniGui, принадлежащая компании FMSoft. Фреймворк UniGui отличается тем, что интерпретация Делфийского кода в HTML выполнена с помощью кроссплатформенного фреймворка Sencha Ext JavaScript. Ну скажем так, что UniGui базируется на Sencha Ext JavaScript. Или можно даже смело сказать, что это Sencha Ext JavaScript — фреймворк для Delphi.

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

Также крутейшим фреймворком для разработки сайтов на Delphi и web-прилоежний является TMS WebCore, результатом которого получатся приложения/ сайты по типу SPA (одностраничные web-приложения).

Здесь, к слову нужно сказать, что перечисленные фреймворки предназначены не только для разработки Frontend, но и Backend. А для перевода паскалевского кода в JavaScript существуют платные и бесплатные компиляторы.

Платные:

  • SMS (Smart Mobile Studio);
  • Elevate Web Builder.

Бесплатные:

  • ExtPascal;
  • P2JS;
  • Pas2JS;
  • Delphi Web Script.

Что такое SOA?

SOA — сервис-ориентированная архитектура, которая поддерживается в Delphi. Это одно из наиболее популярных сейчас решений для того, чтобы создавать большие распределенные web-приложения.

Главной целью сервис-ориентированной архитектуры является повторное использование сервисов для новых приложений. То есть, тут необходимо очень хорошо продумать сами сервисы и их API для того, чтобы иметь возможность повторного использования этого функционала. Если ошиблись в архитектуре, то тут конечно всю систему придется переделывать.

С другой стороны SOA-сервисы — это «черные ящики» с хорошо определенными интерфейсами, их легко переделывать по отдельности и, если они не большие, то это как раз удобно для того, чтобы быстро их изменять прямо во время эксплуатации той или иной системы.

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

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

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

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

Фреймворки Backend

Что же предлагается в составе Delphi (правильнее говорить RAD Studio, потому как и C++ Builder предлагает тоже самое) для программистов, которые создают функционал на стороне сервера?

Rad Server — является относительно недавним изобретением Embarcadero и является готовым под ключ решением для разработки собственных REST-сервисов. Если быть точным, то это REST-системы для разработки внутри предприятия. Его преимущество заключается в том, что очень многие необходимые функции, сделаны заранее. Вы просто устанавливаете RAD Server и начинаете разрабатывать только тот функционал, который вам необходим, а вся служебная информация и функции, которые необходимы для контроля обеспечения надежности работы уже готовы;

DataSnap REST Server — является одним из вариантов приложения DataSnap, который позволяет создавать многозвенные приложения и создавать некую серверную часть для обмена только данными (в формате JSON) по протоколу HTTP/HTTPS. У DataSnap на самом деле возможности намного шире, чем простое создание REST-серверов;

SOAP-сервер и WebBroker — это модули, которые позволяют автоматизировать большую часть рутинной работы, касающуюся создания web-приложения, работающего на сервере. То есть, это модули CGI, ISAPI,..., которые выдают HTML, CSS и JavaScript;

Также стоит отметить, что есть фреймворки, которые поставляются партнерами Embarcadero:

  • DelphiMVCFramework — для создания REST-серверов;
  • Synopse mORMot — свободно распространяемый фреймворк, который фактически предназначенный для реализации ORM;
  • Href WebHub — фреймворк, работающий с БД;
  • и другие фреймворки...

REST, DataSnap, RAD Server, SOAP, WebBroker

WebBroker — это специальный фреймворк, который позволяет встроить web-сервисы в Delphi. Фреймворк поддерживает SOAP (Simple Object Access Protocol) — SOAProtocol, JSON/REST и всевозможные собственные протоколы, если их необходимо упаковать в вызове HTTP.

WebBroker уже давно входит в состав Delphi.

DataSnap и RAD Server обеспечивают достаточно быстрый переход от толстых клиентов к многозвенной архитектуре. Причем DataSnap и RAD-Server представляют здесь два полюса одной линейки продуктов.

DataSnap — это мощный продукт, входящий в поставку Delphi, который позволяет сделать все, но это все придется делать с нуля.

RAD Server, как более, новая технология — не менее мощный продукт (ну может быть не достаточно гибок по сравнению с DataSnap), но имеющий встроенные функции, которые позволяют очень быстро развернуть необходимый функционал и приступить к работе.

DataSnap и RAD Server:

  • увеличивают число поддерживаемых пользователей;
  • упрощают размещение в облаке;
  • добавляют надежность работы приложения и доступность;
  • обеспечивают безопасность и разделение доступа;
  • включают мониторинг и управление производительностью;
  • облегчают внесение изменений.

Архитектура RAD Server показана на рисунке ниже:

Архитектура RAD-Server
Архитектура RAD Server

RAD Server — это готовая (под ключ) backend-платформа, применяемая для быстрого создания собственных прикладных сервисов.

RAD Server Обеспечивает:

  • автоматизацию управления и публикации, созданного на Delphi REST/JSON API;
  • интеграцию с корпоративными базами данных;
  • интеграция с системами IoT Edgeware;
  • широкий спектр прикладных сервисов, таких как службы каталогов и аутентификации пользователей, push-уведомления, отслеживание местоположения пользователя, хранение данных в формате JSON.

RAD Server — это идеальный backend для создания приложений на базе Delphi.

Понравилась статья? Поделиться с друзьями:
Блог Алексея Иванкова
Добавить комментарий

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