Wt: Введение

Wt (произносится "витти") - это библиотека C++ для разработки web-приложений.

API, центральное место в котором занимают виджеты, использует хорошо проверенные паттерны разработки GUI, адаптированные для web. Это позволяет разработчику абстрагироваться от специфических для web деталей реализации, включая протоколы взаимодействия клиента и сервера, управление событиями, поддержку графики, постепенную деградацию (graceful degradation) или прогрессивное расширение (progressive enhancement), а также работу с URL.

В отличии от многих странично-ориентированных фреймворков, Wt была разработана для создания web-приложений, обладающих состоянием, которые, к тому же, весьма интерактивны (благодаря задействованию всех возможностей таких технологий, как WebSockets и Ajax), и доступны (благодаря поддержке браузеров простого HTML), автоматически осуществляя постепенную деградацию или прогрессивное расширение. То, что естественно и просто сделать с помощью Wt, может потребовать чрезмерных усилий при попытке осуществить это самостоятельно, например: анимационная смена виджетов без ущерба для правильной индексации по URL поисковыми роботами, или постоянно открытый виджет чата, который работает даже в таких старых браузерах как Microsoft Internet Explorer 6.

В библиотеку входит сервер приложений, который действует как самостоятельный сервер Http(s)/WebSockets или интегрируется через FastCGI с другими web-серверами.

Интерактивна, безопасна, доступна

Странично-ориентированные фреймворки (Django, Ruby on Rails, PHP и т.п.) не пытаются абстрагироваться от лежащих в их основе технологий (HTML/XHTML, JavaScript, CSS, Ajax, WebSockets, Comet, Forms, DHTML, SVG/VML/Canvas). Как следствие, разработчик должен быть знаком со всеми этими постоянно развивающимися технологиями, а так же предусматривать постепенную деградацию на случай ограниченных возможностей браузера. Структура многих web-приложений по сей день во многом следует странично-ориентированной парадигме времён ранних версий HTML. Это означает не только необходимость реализовывать контроллер для учёта перемещения пользователя от страницы к странице, но и, при использовании Ajax или WebSockets, - самостоятельно проектировать и реализовывать взаимодействие клиента и сервера.

С другой стороны, использование "чистых" Ajax-фреймворков приводит к утомительному программированию на JavaScript, где необходимо иметь дело с причудами браузеров и реализовывать безопасное взаимодействие с ресурсами сервера. Обычно такие приложения не отвечают рекомендациям принципов доступности web-содержимого разными способами (accessibility guidelines), и не могут быть проиндексированы поисковыми роботами.

Генерация кода HTML или использование шаблонов HTML провоцирует проблемы безопасности, такие как XSS (Cross-Site-Scripting - "Межсайтовый скриптинг"), непреднамеренно позволяя коду JavaScript быть вставленному в страницу, и CSRF (Cross-Site Request Forgery - "Подделка межсайтовых запросов"), доверяя информации об аутентификации, находящейся в куках (cookies). Упомянутых проблем трудно избежать при использовании традиционных фреймворков когда Вы, как разработчик, должны реализовывать некоторый функционал на JavaScript, который в этом случае не сможет быть отфильтрован фреймворком.

Напротив, web-приложение на базе Wt разрабатывается только с использованием C++ API, и библиотека сама генерирует необходимый код HTML, CSS, Javascript, CGI, SVG/VML/Canvas и Ajax. Безопасность и кросс-браузерность web-приложений обеспечивается Wt. Например, когда это возможно, Wt максимально задействует JavaScript, Ajax и даже WebSockets, хотя, в то же время, Wt-приложения корректно функционируют и без JavaScript. Сначала Wt запускает простое приложение HTML/CGI, и затем прогрессивно расширяет его до Ajax-приложения, если это оказывается возможным. Wt также обеспечивает встроенную по умолчанию безопасность.

Типичные сценарии использования:

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

Другие выгоды от использования Wt

  • Разработка web-приложений с использованием хорошо знакомых паттернов разработки GUI настольных систем.
  • Наличие обширного набора виджетов, которые могут работать без JavaScript (но с ним работают ещё лучше).
  • Единая спецификация клиентской и серверной валидаций и управления событиями.
  • Возможноть использования XHTML и CSS для компоновки и оформления.
  • Генерация отвечающего стандартам HTML или XHTML кода.
  • Переносимая, сглаженная (anti-aliased) графика, оптимизированная для использования в web (посредством встроенного VML, встроенного SVG, HTML5 canvas или изображений PNG), которая также может быть использована для вывода в PDF.
  • Позволяет избежать распространённых проблем безопасности поскольку обладает полным контролем над уровнем представления и проактивно фильтрует активные тэги и атрибуты, не влияя на бизнес логику, и упрощает аутентификацию благодаря наличию состояний у приложений.
  • Сверхбыстрая загрузка и рачительное использование канала связи, на которые влияет только сложность картинки, а не размер приложения. Wt реализует все известные приёмы оптимизации отзывчивости приложений, используя для этого даже специфические особенности различных браузеров.
  • Простой API с хорошей кросс-браузерной реализацией инициируемых сервером событий, т.е. server push (посредством comet или WebSockets).
  • Возможность использования встроенного сервера httpd для простоты разработки и развёртывания, или FastCGI/ISAPI для развёртывания на действующих web-серверах.