TMS Web Core — база данных и Delphi

TMS Web Core - база данных и Delphi

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

Предисловие

До этого момента было множество как практических, так и теоретических статей по базам данных, в том числе и по подключению Delphi-приложения к базам данных на примере таких СУБД, как MySQL и MS Access.

Delphi, как мне кажется, совершенная система с точки зрения работы с базами данных. Более того, система позволяет использовать и чужие модели доступа к данным. Например, одна из последних «родных» для Delphi технологий доступа к данным является FireDack. Это технология доступа к данным, которая заменила собой устаревшую технологию BDE. Хотя BDE еще вполне можно себе использовать и еще как...

Но я, лично, люблю использовать стороннюю для Delphi технологию от Microsoft — ADO. Можно даже использовать ADO.Net. Для этого, соответственно потребуется установить Framework и все вытекающее из этого. Такую интеграцию можно даже выполнить в стареньком Delphi 7, выпущенном в далеком 2003 году.

Но сегодня речь не об этом, а о том, что мы будем дальше развивать три предыдущие статьи, посвященные TMS Web Core:

  • Delphi TMS Web Core — статья о возможностях Delphi по созданию web-приложений по типу (SPA) Single Page Application. Если кто-то скажет, что для создания web-приложений Delphi сам ничего не может, а может использовать только сторонний фреймворк, то этот человек сильно ошибается. На чистом Delphi с собственными компонентами вполне себе можно создавать крупные web-сайты и приложения. Фреймворки же, как и всегда, лишь значительно облегчают эту задачу. А то, что сами фреймворки написаны на том же Delphi как раз это доказывают. Более того, все современные системы программирования, включая PHP и Python для разработки web-приложений и сайтов используют фреймворки;
  • Прогрессивное web-приложение на Delphi — о возможностях создания с помощью Delphi так называемых Progressive Web Application;
  • wysiwyg web — Delphi TMS Web Core — мечта многих Windows-программистов о том, чтобы разработку web-интерфеса можно было делать в конструкторе форм, как это делается для приложений Windows. Хорошо это или плохо? Конечно хорошо. С одной стороны, дизайн web-приложения или сайта, как и подобает, можно заказать дизайнеру, а с другой, если вам требуется форма как в Windows для вывода или ввода данных в базу данных, но вы строите при этом web-приложение, то зачем вам дизайнер? Вы как и прежде можете набросать компоненты на форму (только для системы это будет будущий HTML-документ) и спокойно писать код для расположенных на форме компонентов. Но можете привлечь и дизайнера. При наличии финансов для будущего приложения это лишним не будет. Короче, можно и так и так.

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

Фреймворк TMS WEB Core в сочетании с компилятором pas2js генерирует клиентские веб-приложения, которые запускаются в браузере. Это означает, что все приложение запускается из файла JavaScript и запускается как таковое в браузере. Это означает, что любой код, выполняемый в клиенте, в конечном итоге запускается как код JavaScript в браузере. Технически, после того, как веб-сервер отправил JS, HTML, CSS и, возможно, некоторые ресурсы изображений в браузер, больше нет соединения с веб-сервером. С этого момента клиентское веб-приложение может начать работать автономно в браузере. Все дальнейшее взаимодействие с сервером обычно осуществляется через вызовы HTTP REST (взаимодействие через веб-сокеты может быть возможной альтернативой). Для проектирования приложений, использующих базы данных, это имеет ряд последствий:

  • классические компоненты базы данных VCL НЕ могут быть использованы, такие как FireDAC, dbExpress, ADO или другие сторонние компоненты доступа к базе данных. Это компоненты VCL, которые будут изначально напрямую обращаться к слою базы данных на машине Windows, а уровень безопасности браузера в любом случае предотвратит такой прямой доступ;
  • база данных, используемая веб-клиентским приложением, обычно не установлена ​​на клиентской машине. Браузер экранирует приложения базы данных, работающие на клиенте или в сети клиентской машины, по соображениям безопасности;
  • даже если база данных поддерживает связь на основе сокетов для выполнения операций с базой данных, это обычно не делается из клиентского веб-приложения по соображениям безопасности. Поскольку этот код выполняется в браузере, любой опытный хакер может следовать за этим кодом и узнать, как получить доступ к вашей базе данных, и, возможно, сам вызвать код для выполнения вредоносных операций с базой данных. Поэтому в этом случае обязательно, как минимум добавляется промежуточный сервер, называемый сервером приложений. О нем я уже рассказывал в ряде статей, а именно в статьях: Удаленные базы данных, Разработка web-приложений, Разработка web-приложений (часть 2).

Вместо этого работа с базами данных осуществляется в архитектуре SPA (одностраничных веб-приложений) или, например, PWA, также используемых с Angular, Vue, React, … (библиотеками фронтенда), выполняемой через REST API. Приложение веб-клиента будет проходить аутентификацию и авторизацию с помощью этого REST API, и при получении доступа оно будет выполнять HTTP-запросы для выполнения операций CRUD (создание записи, чтение, модификацию и удаление) в базе данных. Именно сервер REST API обрабатывает связь между клиентом и сервером базы данных, и именно сервер REST API выполняет операции с базой данных. Код сервера REST API выполняется на сервере, может быть собственным приложением (его еще поэтому и называют сервером приложений в трехзвенной клиент-серверной архитектуре), и этот код не может быть виден или затронут кем-либо со злым умыслом.

Он очень похож на собственное приложение для смартфона, которое подключается к центральной базе данных. Здесь также типичным решением является то, что центральная база данных управляется сервером REST API (сервером приложений). Следующая иллюстрация как раз демонстрирует данную связь:

Подключение к базе данных в TMS Web Core
Подключение к базе данных в TMS Web Core

Как видите из схемы все типы клиентов могут быть подключены по данной схеме. Эта схема используется для подключения к базам данных в технологии TMS Web Core. Но вы также можете использовать ее и для обычных VCL-приложений.

Я по большей степени, программирую двухуровневые клиент-серверные системы и подключаю клиента VCL непосредственно к базе данных с помощью драйвера доступа к данным, но в задачах покрупнее можно и нужно использовать как минимум трехзвенную архитектуру клиент-сервера, вынося программную логику на промежуточный сервер — сервер приложений. На схеме он обозначен как блок клиентских сервисов, реализуемых с помощью разных технологий, например, RAD server, DataSnap и других. Применительно к фреймворку TMS WebCore можно использовать технологию доступа к данным XDATA.

TMS WEB Core разработан так, чтобы быть полностью открытым по отношению к серверу REST, предоставляющему доступ к базе данных. В качестве основного компонента, который может использоваться для выполнения запросов HTTP GET/PUT/POST/DELETE к серверу REST является компонент TWebHttpRequest .

Обычно служба REST ожидает данные в формате JSON в качестве ввода/вывода. Класс TJSONObject в модуле WebLib.JSON предлагает аналогичные классы, предлагаемые в модуле System.JSON, включенном в стандартную комплектацию Delphi для приложений VCL или FMX.

Кроме того, TMS WEB Core включает механизмы привязки к базе данных на более высоком уровне, т. е. на уровне клиентского набора данных, который будет выполнять всю необходимую HTTP-коммуникацию с вашим сервером REST DB. И он также включает компоненты для обеспечения доступности облачных баз данных в качестве наборов данных из вашего клиентского веб-приложения TMS WEB Core.

Так, ну что же, если 90% написанного вам понятно, то погнали дальше...

Решения Delphi REST API для классических баз данных


Компонент Описание
TXDataWebDataSet Компонент набора данных, разработанный для использования с REST сервером TMS XData. Он предлагает интерфейс без кода для REST сервера XData с дополнительным преимуществом, заключающимся в том, что XData поддерживает информацию метаданных. Таким образом, без дополнительной настройки набор данных веб-клиента TXDataWebDataSet автоматически подберет всю информацию метаданных полей БД.
TWebRadServerClientDataset Компонент набора данных, разработанный для сервера REST, созданного с помощью сервера Embarcadero RAD. Создайте свой REST API с помощью сервера Embarcadero RAD для предоставления операций CRUD в наборе данных, а TWebRadServerClientDataset будет обрабатывать все HTTP-соединения и предлагать клиентской стороне набор данных для подключения к нему элементов управления пользовательского интерфейса.
TWebSQLRestClientDataset Компонент набора данных, разработанный для совместной работы с сервером SQLDBRestBridge с открытым исходным кодом. Он предлагает настраиваемый сервер DB Rest Bridge без кода, с которым TWebSQLRestClientDataset взаимодействует и предоставляет доступ через этот интерфейс TDataset.
TWebDreamFactoryClientDataset DreamFactory предлагает создание REST API, включая доступ к базам данных через веб-интерфейс. Таким образом, без написания кода можно создать свой REST API для операций CRUD в базе данных. Когда такой REST API настроен в DreamFactory, TWebDreamFactoryClientDataset может автоматически взаимодействовать с ним и предлагать доступ к базе данных таким образом через свой интерфейс TDataset к элементам управления пользовательского интерфейса, поддерживающим БД, в клиентском веб-приложении TMS WEB Core

Решения Delphi REST API для облачных баз данных


Компонент Описание
TWebMyCloudDbCLientDataset Служба myCloudData предлагает онлайн-набор данных, размещенный в облаке. Таким образом, здесь вам не нужно размещать базу данных самостоятельно, вы можете использовать учетную запись в уже размещенной базе данных. TWebMyCloudDbCLientDataset представляет таблицы на службе myCloudData как простые в использовании наборы данных.
TWebFirestoreClientDataset Веб-сервисы Google также включают облачное хранилище данных с Firestore. Благодаря TWebFirestoreClientDataset использование облачного хранилища данных Google становится максимально бесшовным.
TWebFaunaDbClientDataset FaunaDB -это компания, предоставляющая услуги облачных данных, которая фокусируется на облачном хранилище данных, хранящем данные на серверной инфраструктуре FaunaDB. Она предлагает консоль для настройки таблиц, запросов и доступа к ним через REST API. С компонентом TWebFaunaDbClientDataset использование данных, размещенных в FaunaDB, становится таким же простым, как подключение элементов управления пользовательского интерфейса с поддержкой БД к набору данных.

Существующие REST API

Во многих случаях уже имеется REST API для доступа к данным или сервисам в компании, которые можно было бы создать с помощью node.js, ASP.NET core, PHP, …
Когда этот REST API использует OAuth2 для аутентификации и авторизации, компонент TWebRESTClient может использоваться для OAuth2 и выполнения REST HTTP-запросов к серверу. Когда нет аутентификации и авторизации на основе OAuth2 , компонент TWebHttpRequest может использоваться для всех команд REST HTTP GET/PUT/POST/DELETE.

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

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

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