Говоря об Интернете, мы редко вспоминаем о том, что за сверкающими фасадами сайтов стоят простые труженики-серверы, которые выполняют множество самых разных задач. Я говорю не только о серверах как о "железе", но и о серверах-программах. Среди них есть и Zope. Конечно, эти четыре буквы вызывают в голове русскоговорящего человека массу ассоциаций, но, если следовать правилам английской транскрипции, получаться должно что-то вроде "зоуп". Хотя многие говорят "зоп". Впрочем, зачем это я забегаю вперёд? Давайте обо всём по порядку - и о названии, и о применении, и о том, что с этим самым применением связано.
Что такое Zope
Zope - это сервер web-приложений. То есть, по-русски, Zope помогает создавать динамические web-сайты, которые придают Всемирной паутине её привлекательную интерактивность. Среди других известных серверов web-приложений можно назвать, например, ColdFusion, IBM WebSphere Application Server или Netscape Application Server. Zope может взаимодействовать с Apache, Microsoft IIS и другими web-серверами. Также Zope отличается от множества других серверов приложений тем, что написан на Python'е - переносимом интерпретируемом языке. Исходный код Zope открыт.
Сервер приложений в современном Интернете - это прослойка между web-сервером и сервером базы данных, которая обеспечивает надёжность и стабильность работы приложений, взаимодействующих с этими серверами. Такая система часто называется трёхуровневой. Сервер приложений существенно упрощает задачу разработчиков прикладных web-приложений, позволяя им отвлечься от массы тривиальных, но довольно затратных по времени реализации чисто технических моментов (например, стабилизации соединений по HTTP), и сосредоточить все усилия на логике самого приложения. В чём-то, пожалуй, сервер приложений можно даже сравнить с операционной системой, но только работающей не с "железом", а с другим программным обеспечением.
Однако Zope имеет одно существенное отличие от множества других серверов приложений, и отличие это состоит в том, что...
Zope - объектно-ориентированная
платформа
Слово "объектно-ориентированный" стало модным не вчера. Уже на протяжении десятков лет появляются всё новые программные продукты, гордо носящие звание объектно-ориентированных. Очевидно, завтра (ну... в обозримом будущем, в смысле) мода на объектную ориентированность тоже не пройдёт по причине удобства этого подхода.
Название ZOPE расшифровывается на самом деле как "The Object Publishing Environment" - среда публикации объектов. Что же это значит - объектно-ориентированная платформа? Дело в том, что Zope оперирует объектами - URL, вызываемый из браузера, приводит в терминах Zope к публикации объекта. Объекты хранятся во встроенной в Zope объектно-ориентированной базе данных ZODB и при работе приложения сервер обращается к ним напрямую. Согласитесь, это довольно элегантное решение, которое полностью соответствует заявлениям разработчиков Zope об объектной ориентированности их продукта.
Объектно-ориентированный подход предполагает существование некоторой иерархии объектов. И она действительно существует, что отражено в URL-адресах сайтов, созданных на основе Zope. С виду, правда, эти URL ничем не отличаются от тех, которые содержат вложенные папки на сервере, но на самом деле он отображает иерархию объектов.
Сердце Zope - это ORB, Object Request Broker, или, по-русски, обработчик объектных запросов. Запросы он получает от публикатора (Zope Publisher), который сам их берёт у web-сервера. ORB определяет, какой из объектов запрошен для публикации, и публикует его, выдавая Publisher'у назад DTML-код. DTML (о нём позднее) обрабатывается публикатором, т.е. в него включаются все другие необходимые объекты (это снова происходит через ORB), а затем, когда все нужные объекты будут включены в HTML, он будет отдан web-серверу. Самую что ни на есть активную роль в этом процессе играет база данных ZODB. Объекты, хранящиеся в базе данных, это полноценные экземпляры классов языка Python. Одна из самых интересных особенностей ZODB - возможность замены класса хранилища. Так, вместо стандартного класса FileStorage можно использовать альтернативные - SQLStorage или BerkeleyStorage. Разные хранилища отличаются по своей функциональности. Например, FileStorage - один из немногих классов хранилищ, позволяющий производить бесконечные "откаты". Стандартный класс хранилища базы данных записывает все объекты в один большой файл. Ко всему прочему, FileStorage поддерживает кластеризацию, называется эта технология ZEO - Zope Enterprise Option.
Есть в Zope и поддержка доступа к оккупировавшим Интернет реляционным СУБД, таким, как Microsoft SQL Server, MySQL или Oracle. Специально для этого разработана технология ZSQL, которая и даёт возможность web-приложению на основе Zope взаимодействовать с реляционными СУБД.
Теперь обещанная информация о языке разметки шаблонов документов, Document Tem-plate Markup Language, или просто DTML. Это промежуточный язык для публикации сайтов, который используется в Zope самым что ни на есть активным образом. Он записывает с помощью тегов информацию об объектах в Zope. Сравнительно простые сайты можно создавать с помощью DTML, без использования Python.
Python и Zope
Как я уже говорил, Zope целиком написан на языке программирования Python. Это, надо сказать, довольно своеобразный язык программирования. Тем не менее, он активно используется при программировании приложений на Zope. Немного почитать о нём в "КВ" можно в №44 за 2006 год.
В Zope существует поддержка так называемых продуктов - компоненты, которые позволяют добавлять в систему новые типы объектов. Пишутся продукты, как вы, наверное, уже догадались, именно с помощью Python'а. Это во многом аналогично "контролам" в ASP.NET: например, продукты могут содержать код специфических типов объектов, внедряемых на web-страницы, и затем дизайнер с момощью DTML сможет добавить их на сайт, совершенно не интересуясь тем, как там они внутри устроены. Правда, у продуктов есть один минус - "на лету" их не добавишь, после их установки Zope приходится перезапускать.
Есть в Zope и так называемые Python-методы. Это код, по своим задачам аналогичный коду DTML, но написанный при этом на "Питоне". Как правило, это довольно простой по своей структуре код, предназначенный для работы с шаблонами. "Внешние методы" также пишутся на "Питоне", но они уже могут действовать за рамками бизнес-логики сайта.
Но для тех, кто не хочет изучать Python только для того, чтобы "подружиться" с Zope, есть выход. Называется он ZClass. Web-интерфейс Zope позволяет создавать несколько ограниченные объекты, используя для этого указание свойств и описание способов их публикации с помощью DTML. Единственный минус Z-классов состоит в том, что они не могут быть принципиально новыми, по сравнению с существующими, поскольку должны наследовать их свойства, т.е. атрибуты.
Естественно, программирование для Zope на "Питоне" требует тщательного изучения документации, поскольку "положить" сервер приложений, причём сразу на обе лопатки, с помощью Python легче лёгкого.
Zope и безопасность
В наше неспокойное время, когда в каждой киберподворотне притаилось по хакеру (а то и по нескольку сразу), даже любая мало-мальски полезная утилита для работы с World Wide Web вызывает массу вопросов по поводу собственной безопасности. Что уж говорить о такой вещи, как сервер приложений. Безопасность важна не только как безопасность самого сервера, но и как те права, в которых он может ограничить запускаемые с его помощью приложения, сиречь сайты. Поэтому настало самое время поговорить о безопасности в Zope.
В Zope существует три уровня безопасности: пользовательская, ролевая и по виду доступа. Безопасность по виду доступа определяется при создании компонента. Определяет её границы - сиречь полномочия компонента - не кто иной, как его создатель-программист. Каждому классу и каждому методу класса в отдельности могут быть определены собственные полномочия на добавление в дерево объектов. Таким образом, программист может максимально гибко настроить права собственного компонента на взаимодействие с другими.
Роль - это категория безопасности для объектов в иерархии, начиная с некоторого определённого уровня. Безопасность ролей, как правило, настраивает администратор сервера. Стандартных роли в Zope всего три - Manager, Owner и Anonymous. Manager - это "суперадминистратор", аналог юниксоидного Root'а. Он может ниспровергать и возносить в правах всех остальных на сервере, а самому ему сделать никто ничего не может (ну, кроме, опять-таки, его же самого). Owner - это просто хозяин определённых ресуросов, которые, как правило, им же и были созданы. Anonymous - это простой посетитель сайта, самый бесправный из всех пользователей.
Пользовательская безопасность реализуется посредством специального класса пользователей, который, естественно, имеет название User. Информация о пользователях хранится в той же базе данных, где и другие объекты, хотя её можно перенаправить с помощью специальных классов. Отдельные пользователи нужны для аутентификации этих вот самых пользователей, что является в сайтостроении очень распространённой задачей.
Все эти уровни безопасности тесно связаны между собой, и в итоге в панели администрирования (web-интерфейсе администратора сервера) возникает немалое количество разнообразных опций. Именно от их грамотной настройки и зависит безопасность итогового решения не базе Zope.
Резюме, оно же итоги
Во-первых, как видите, Zope - вещь поразительно гибкая и мощная. Поэтому её целесообразно применять только для достаточно крупных web-порталов, чаще всего - корпоративных, которые должны использоваться и клиентами, и сотрудниками, и партнёрами компании. Их строить на основе Zope как раз достаточно удобно, хотя сейчас, конечно, весь корпоративный сектор повёрнут лицом к Java-технологиям, а Python и Zope оказываются не в фаворе.
Во-вторых, Zope - сервер приложений, довольно-таки прожорливый в плане системных ресурсов, поскольку и сам Python - не пушинка. Вообще интерпретатор "Питона" считается не самым оптимальным из разных интерпретаторов языков программирования, да и язык, как я уже упоминал, имеет много особенностей, что делает Zope не самой популярной из подобных платформ.
В-третьих, Zope - это всё же перспективно. Потому что Zope постепенно растёт, исправляются многие проблемы. Если, например, раньше не было даже приличной англоязычной документации, то теперь есть и целые русскоязычные книги не самого маленького объёма, посвящённые Zope.
Так что Zope - вещь очень и очень полезная и перспективная. Жаль только, что название такое... странноватое, что ли, для славянского глаза.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы