Библиотека сайта rus-linux.net
GNU Mailman
Глава 10 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: GNU Mailman
Автор: Barry Warsaw
Перевод: А.Панин
10.8. REST
Одно из ключевых архитектурных изменений в версии 3 системы Mailman заключается в удовлетворении запроса, предъявляемого к ней в течение многих лет: предоставления упрощенного способа интеграции Mailman со сторонними системами. Когда я был нанят компанией Canonical, являющейся корпоративным спонсором проекта Ubuntu в 2007 году, моя работа изначально заключалась в добавлении возможности использования списков рассылки в Launchpad, хостинг-платформу для совместной работы над программными проектами. Я знал, что версия 2 системы Mailman подходила для решения задачи, но при этом требовалось задействовать пользовательский веб-интерфейс системы Launchpad вместо стандартного пользовательского веб-интерфейса системы Mailman. Так как списки рассылки системы Launchpad практически всегда использовались в качестве дискуссионных списков рассылки, нам хотелось добиться сокращения различий в методах управления ими. Администраторы списков рассылки не должны иметь в распоряжении избыточное количество параметров конфигурации, доступных на стандартном сайте под управлением системы Mailman, поэтому оставалось дать ответ на вопрос о том, какие параметры могут понадобиться и будут представлены в пользовательском интерфейсе системы Launchpad.
В тот момент система Launchpad не являлась свободным программным обеспечением (это изменилось в 2009 году), поэтому нам пришлось проектировать уровень интеграции таким образом, чтобы код системы Mailman версии 2, распространявшийся в соответствиями с условиями лицензии GPLv2, не затрагивал код Launchpad. Это привело к выработке ряда архитектурных решений в ходе проектирования архитектуры уровня интеграции, которые были достаточно неочевидными и отчасти неэффективными. Так как на данный момент система Launchpad является свободным программным обеспечением, распространяемым в соответствии с условиями лицензии AGPLv3, эти решения на сегодняшний день не являются необходимыми, но работа над ними позволила получить полезные знания о том, как система Mailman без пользовательского интерфейса может быть интегрирована в состав сторонних систем. Стал очевидным тот факт, что основная часть системы, эффективно и надежно реализующая операции для работы со списком рассылки, может работать под управлением любого типа веб-интерфейса, включая интерфейсы на основе Zope, Django или PHP, а также вообще без пользовательского веб-интерфейса.
В тот момент для реализации этой идеи был доступен ряд технологий, при этом фактически интеграция систем Mailman и Launchpad основана на использовании протокола XMLRPC. Но протокол XMLRPC имеет ряд проблем, что делает его не идеальным протоколом.
В версии 3 системы Mailman была применена модель передачи состояния представления (Representational State Transfer - REST) для внешнего административного управления. Модель REST основана на протоколе HTTP и стандартном формате представления объектов системы Mailman, JSON. Эти протоколы используются повсеместно и отлично поддерживаются большинством разнообразных языков программирования и окружений, делая интеграцию Mailman со сторонними системами достаточно простой. Модель REST отлично подходила для использования совместно с версией 3 системы Mailman, а сейчас большинство функций системы доступно при использовании REST API.
Это мощная парадигма, которую должно использовать большее количество приложений: предоставлять основную часть, которая качественно реализует базовые функции, предоставляя REST API для управления ею. REST API предоставляет дополнительный способ интеграции с системой Mailman, в дополнение к использованию интерфейса командной строки или разработки кода на языке Python для доступа к внутреннему API. Эта архитектура является очень гибкой и может быть использована и интегрирована такими способами, которые находятся за гранью стандартного видения системных архитекторов.
Такая архитектура позволяет не только вести разработку большим количеством способов, но даже проектировать и реализовывать официальные компоненты системы. Например, новый официальный пользовательский веб-интерфейс в версии 3 системы Mailman технически является отдельным проектом со своей кодовой базой, развиваемым в основном опытными веб-дизайнерами. Эти выдающиеся разработчики имеют возможность принимать решения, изменять дизайн и запускать реализации веб-интерфейса, не испытывая затруднений из-за хода разработки основного кода системы. В ходе разработки пользовательского веб-интерфейса отправляются запросы добавления необходимых функций в основную часть кода и разрешения доступа к ним с использованием REST API, но разработчикам веб-интерфейса не нужно ждать реализации необходимых функций, так как они могут использовать прототип сервера и продолжать экспериментировать и разрабатывать пользовательский веб-интерфейс в то время, как будет дорабатываться основная часть кода.
Мы планируем использовать REST API для множества других вещей, включая возможность добавления стандартных операций в сценарии и интеграцию с серверами IMAP или NNTP для предоставления альтернативной возможности доступа к архивам.
Далее: Интернационализация