Parsoid заменит штатный парсер MediaWiki в версии 1.47

Parsoid заменит штатный парсер MediaWiki в версии 1.47

Parsoid, PHP-библиотека, которую с 2012 года разрабатывает команда Wikimedia Foundation для двустороннего преобразования вики-текста MediaWiki в документ-модель HTML/RDFa и обратно. Изначально Parsoid писали на JavaScript под Node.js и запускали как отдельный веб-сервис на кластере Wikimedia с декабря 2012 года, под нужды визуального редактора VisualEditor, которому требовалось редактировать статьи не в разметке, а в HTML-представлении. В 2019 году проект перенесли на PHP, и PHP-версия полностью заменила JavaScript-версию.

С версии MediaWiki 1.35 Parsoid входит в состав ядра как composer-библиотека и не требует отдельной настройки. Его сейчас используют VisualEditor и система перевода контента (Content translation). Главная техническая цель Parsoid, «бесшовная» конвертация без потери информации и без так называемых dirty diffs (грязных различий, когда обратное преобразование HTML в вики-текст меняет разметку статьи, хотя смысл не менялся). На вики Wikimedia запросы к Parsoid долгое время проксировал сервис RESTBase, который кэшировал готовый HTML; ожидается, что со временем RESTBase заменят кэшем, более тесно интегрированным с самим MediaWiki.

Ключевая новость страницы, в MediaWiki версии 1.47 Parsoid планируют сделать парсером по умолчанию, заменив им нынешний нативный (родной) парсер вики-разметки. Этот шаг называют проектом «унификации парсера» (parser unification): вместо поддержки двух параллельных движков разбора текста MediaWiki перейдёт на единственный.

Отдельно документация фиксирует судьбу внутреннего REST API Parsoid: он не проходил аудит безопасности, никогда не был официально открыт наружу и дублирует функциональность корпоративного (enterprise) API MediaWiki. Этот внутренний API, которым исторически пользовался RESTBase, объявлен устаревшим и запланирован к удалению в MediaWiki 1.43; сторонним разработчикам, которые всё ещё на него полагаются, рекомендуют перейти на основной REST HTML endpoint ядра MediaWiki.

Ключевые факты

  • Parsoid, PHP-библиотека Wikimedia Foundation для двусторонней конвертации вики-текста MediaWiki в HTML/RDFa и обратно; разрабатывается с 2012 года.
  • Изначально написана на JavaScript под Node.js и работала как отдельный сервис; в 2019 году полностью перенесена на PHP.
  • Входит в ядро MediaWiki с версии 1.35 без дополнительной настройки; используется VisualEditor и системой перевода контента.
  • В MediaWiki 1.47 Parsoid должен стать парсером по умолчанию, заменив нынешний нативный парсер, проект называют «унификацией парсера».
  • Внутренний REST API Parsoid (использовался сервисом RESTBase) объявлен устаревшим и будет удалён в MediaWiki 1.43; рекомендован переход на основной REST HTML endpoint ядра.

Почему это важно

MediaWiki годами поддерживала два параллельных способа разбора вики-разметки: старый нативный парсер и более новый Parsoid, изначально созданный под нужды визуального редактора. Такое дублирование увеличивает нагрузку на разработку и создаёт риск расхождений между тем, как статью показывает старый парсер и как её видит VisualEditor. Переход на Parsoid как парсер по умолчанию в версии 1.47, попытка закрыть это расхождение и оставить один движок разбора текста вместо двух.

Кому это важно

В первую очередь новость касается разработчиков и системных администраторов MediaWiki, как в самой Wikimedia Foundation, так и в сторонних вики-проектах на этом движке, включая авторов расширений (extensions). Также это важно для разработчиков, интегрирующих сервисы поверх Wikipedia и других вики на MediaWiki через REST API: часть из них полагалась на внутренний API Parsoid, который скоро уберут.

Как это применить

Parsoid уже входит в состав MediaWiki начиная с версии 1.35 как composer-зависимость и не требует ручной настройки для обычного использования VisualEditor. Разработчикам, которым нужен именно внутренний REST API Parsoid (например, для интеграций, унаследованных от эпохи RESTBase), стоит заранее перейти на основной REST HTML endpoint ядра MediaWiki, внутренний API запланирован к удалению в версии 1.43. Исходный код доступен в репозитории на GitHub (wikimedia/parsoid), для локальной разработки предусмотрен git-чекаут библиотеки отдельно от версии, встроенной в MediaWiki, а тестирование запускается командой composer test.

Можно ли доверять

Это официальная документация на mediawiki.org от команды Wikimedia Foundation, а не сторонний пересказ или маркетинговый материал. Parsoid находится в промышленной эксплуатации с 2012 года, а перенос с JavaScript на PHP в 2019 году прошёл при поддержке отдельного набора тестов на round-trip-конвертацию и визуальных diff-тестов, сравнивающих вывод Parsoid с выводом старого парсера. Источник описывает текущее состояние проекта, а не анонс будущего продукта, поэтому фактам о статусе (версии 1.35, 1.43, 1.47) можно доверять как техническому плану разработчиков.

Риски и подводные камни

Документация прямо указывает на «известные различия с выводом нативного парсера» (Known differences with Core Parser output), то есть переход на Parsoid как парсер по умолчанию в 1.47 способен затронуть отображение части существующих статей с нестандартной или сложной разметкой шаблонов. Отдельный риск, для тех, кто всё ещё использует запланированный к удалению внутренний REST API Parsoid: он никогда официально не поддерживался вовне и не проходил аудит безопасности, так что при удалении в MediaWiki 1.43 такие интеграции сломаются, если их заранее не перевести на основной REST HTML endpoint ядра.