Связь веб-клиента с СУБД по API (Application Programming Interface)
1) Общие сведения об API
API (Application Programming Interface) — это расширение Web-сервера запускается как многопоточная динамическая библиотека (DLL), выполняющее обработку каждого вызова сервера в обычном процессе Web-сервера, что значительно проще, чем создание отдельного процесса для каждого клиентского запроса.
Наиболее известны два API: NSAPI (NewScape API) от компании NetScape для своего Web-сервера Enterprise Server и ISAPI (Internet Server API) от компании Microsoft для своего сервера IIS. Фактически IIS предоставляет три возможных процесса для выполнения приложения с разной степенью защиты.
Рис. Структурная схема взаимодействия WEB-клиент с CУБД по API
Рис. Подробное взаимодействия WEB-клиент с CУБД по API
2) Механизм обмена данными
Обращаются к библиотеке также, как и к CGI, т.е. из форм или ссылок, созданных при помощи тэгов <FORM> и <A>. Однако, вместо чтения данных из переменных окружения, расширение ISAPI получает данные с помощью функции HttpExtensionProc, возвращающей указатель на структуру типа EXTENSION_CONTROL_BLOCK, включающую такие поля как: cbSize, IpszMethod (передает метод GET или POST), IpszQueryString, IpszPathInfo, WriteClient, ServerSupportFunction, ReadClient, GetServerVarizble и ряд других.
С помощью полей GetServerVariable и ReadClient передаются адреса одноименных функций, специально предназначенных для получения данных от браузера клиента. Для отправки ответа клиенту используются функции WriteClient, ServerSupportFunction, формирующие и передающие ответ серверу через структуру EXTENSION_CONTROL_BLOCK.
3) Достоинства API
• Клиенты, работающие через API, соединяются с сервером БД значительно быстрее, чем CGI-скрипты, так как API, являясь динамической библиотекой, после первого обращения постоянно находится в памяти, что ускоряет повторные вызовы.
• API-интерфейсы предоставляют большую функциональность, чем CGI, — можно написать дополнительные процедуры, осуществляющие контроль доступа к файлам, а также доступ к самому Web-серверу.
• IIS позволяет выделять отдельный поток из своего потокового пула для работы библиотеки, ибо в общем пуле все потоки пула могут быть заняты, и запрос к библиотеке будет отвергнут.
4) Недостатки API
• Языковая зависимость, поскольку прикладные программы должны быть написаны на языках, поддерживаемых в данном API (обычно, это С), хотя существуют версии и на других языках, включая Delphi.
• Неизолированность процесса, поскольку библиотека выполняется в адресном пространстве сервера, и ошибочные программы могут «уронить» сервер или какое-либо приложение.
• Ограниченность применения, поскольку написанные в соответствии с тем или иным API программы могут использоваться только на соответствующем Web-сервере.
• Архитектурная зависимость, поскольку API-приложения зависимы от архитектуры сервера.
• Если библиотека уже запущена, то необходимо остановить сервер для ее замены. На время отладки можно изменить значение ключа реестра для запрета кэширования библиотеки: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\CachelExtention на 0.
5) Варианты защиты
• Настройка защиты приложений
Рис. Настройка защиты приложений в API
• Низкая (процесс IIS)
Приложение ISAPI (впрочем, и другие приложения также) в режиме защиты Low (IIS Process) работает в том же пространстве процесса (т.е. Inetinfo.exe), что и сам IIS. Если происходит отказ приложения и нарушение доступа к памяти у IIS или серьезный сбой другого важного серверного процесса, то IIS и все другие Web-приложения тоже могут завершиться аварийно.
• Средняя (объединенная)
При использовании режима Medium (Pooled) Application Protection приложение запускается со всеми другими связанными с ним приложениями в процессе Dllhost.exe. как и при режиме защиты Low (IIS Process), если одно из приложений, использующее способ защиты Medium (Pooled) выходит из строя, это может послужить причиной сбоя всех приложений, запущенных в той же рабочей области.
• Высокая (изолированная)
Каждое высокозащищенное приложения запускается в отдельной копии Dllhost.exe, и если происходит сбой приложения, это не станет причиной останови для других приложений.
6) Создание API в Delphi
• Особенности создания API в Delphi
Генерируемый мастером Delphi DB Web Application Wizard исходной код библиотеки ISAPI/NS API очень похож на код приложения CGI. Отличается он только тремя экспортируемыми функциями API, благодаря которым Web-сервер может обращаться с библиотекой как с собственным расширением. Блок Unit1.pas будет полностью аналогичен этому блоку в CGI-приложении. Размеры обоих приложений, создаваемых в Delphi, примерно 600 Кбайт.
• Пример программы API
Library MyISAPI;
Uses WebBroker. HTTPApp, ISAPIAPP;
Unit1 in ‘Unit1.pas’ {WebModule1: TWebModule};
{$R*.RES}
Exports GetExtensionVersion; // сообщает серверу версию спецификации
HttpExtensionProc; // обеспечивает обмен данными между расширением и сервером
TerminateExtension; // освобождает ресурсы перед выгрузкой ISAPI из памяти
Begin
Application.Initialize;
Application.CreateForm(TWebModule1, WebModule1);
Application.Run;
End.