phdru.name / Russian / Software

XML и Web службы

Лекция N3 - продолжение лекций про web-технологии.

После того, как web разросся до размеров Интернета, и стал если не основным траффикогенерирующим элементом Интернета, то главным способом общения пользователей посредством Интернета, стали появляться различные полуавтоматические и автоматические средства извлечения информации с веба (некоторые почему-то пишут "с вэба".)

Появились разного рода роботы, пауки, спайдеры, краулеры - так стали именоваться программы, автоматически "ползающие" по сайтам, то есть читающие сайты страничку за страничкой и переходящие по ссылкам на следующие странички. Программы эти считывали информацию сайтов в различных целях - например, сделать копию сайта или части сайта; узнать, что нового появилось на сайте со времени последнего посещения; проиндексировать информацию для поиска; вычленить определённую информацию (скажем, прогноз погоды или курсы валют) и опубликовать её в другом месте.

Большинство программ такого рода страдало и продолжает страдать от неструктурированности информации. Скажем, сегодня прогноз погоды публикуется в одном дизайне, а завтра сайт меняет "одежду", и выходит в другом дизайне. Ссылки (URL) меняются, и т.д. Информация оказывается расположена в другом месте, и робот, ищущий её на старом месте, ломается.

Существует жаргонный термин, описывающий программы, "выкусывающие" или ищущие информацию в HTML - screen scraping.

1. Языки структурированной разметки - SGML, HTML, XML.

И вот родилась идея обмениваться через web структурированной информацией. Для начала придумали способ представления этой самой структурированной информации. От корней - от HTML - решили далеко не отходить.

Изначально HTML был приложением (языком) SGML. SGML, Structured Generalized Markup Language - это метаязык, способ порождения языков разметки. Каждый конкретный язык порождался с помощью формального описания DTD, Document Type Definition. В частности, существовали DTD, описывающие первые версии HTML. Потом ситуация ухудшилась - в HTML проникли элементы синтаксиса, не описываемые DTD. То есть HTML перестал быть SGML. И это только формально, а фактически HTML очень быстро перестал быть SGML, потому что реальные пользователи и программы создавали чудовищный HTML, совершенно не следующий законам SGML и DTD.

Консорциум W3C (World Wide Web Consortium) решил это исправить. От SGML решено было отказаться, точнее, решено было SGML улучшить. Стандарт SGML содержит много неясностей, частных случаев, и прочих "тёмных углов". Его необходимо было "спрямить". И вот на свет появился стандарт XML, eXtensible Markup Language, сделанный из SGML путём урезания и упрощения последнего, и расширения получившегося подмножества. От SGML стандарт XML унаследовал внешний вид с угловатыми <тегами и="атрибутами" /> и способ генерации языков разметки с помощью DTD. Поверх этого наложились требование указания кодировки (в отсутствии явного указания кодировка полагалась UTF-8 - одна из универсальных кодировок Unicode, с помощью которого можно записать тексты почти на всех языках мира), и требование "драконовского" парсера. Язык на основе XML обязан строго следовать стандарту XML и описанию DTD, в противном случае парсер ОБЯЗАН отвергнуть документ и сообщить об ошибке. Документ, способный пройти проверку парсером, называется "хорошо сформированным" (well-formed) XML. Документ, соответствующий DTD, называется валидным. Требование "драконовского" парсера означает, что не бывает плохого XML - документ, не являющийся хорошо сформированным XML, просто не является документом XML. Однако невалидирующий парсер имеет право проигнорировать DTD, и тогда будет неизвестно, является ли документ валидным. Это допускается, хотя и не приветствуется.

После того, как появился стандарт XML, он начал быстро развиваться, стало появляться множество приложений этого языка. Интересно, что большинство приложений сами являются языками, основанными на XML. Например, XSL, XML Stylesheet Language, язык стилевых таблиц XML, и его подъязык XSLT, XSL Transformation Language, язык трансформации XML - сами являются языками XML.

Долгое время заметным исключением из этого правила был язык DTD. Документы DTD сами пишутся в EBNF, расширенной форме Бэкуса-Наура, а не в XML, что неудобно - валидирующие парсеры должны иметь в своём составе парсер DTD. Эта проблема вылечилась появлением языков схем. Язык схем - это язык XML, на котором описывается то, как устроен (другой) язык XML, то есть то, что раньше писалось в DTD. Языков схем сейчас тоже есть несколько. Одни из них описывают свои языки декларативно ("тег X должен иметь непустой атрибут Y"), другие языки описывают ограничения ("атрибут Y тега X не может быть пуст").

2. Web-службы.

После того, как появился (более или менее) универсальный формат данных, встал вопрос об обмене данными в этом формате через web. В качестве протокола решено было использовать старый добрый HTTP; он имеет то достоинство, что на большинстве корпоративных межсетевых экранов (firewall) порт 80 этого протокола (и порт 443 протокола HTTPS) открыты; некоторые параноидальные сетевые администраторы считают, что это скорее недостаток, потому что тогда фильтровать трафик приходится не на сетевом экране, а с помощью специальных HTTP-proxy.

Клиент-серверный механизм обмена стандартизованными данными через web получил название web-services, веб-службы.

Однако по вопросу использования HTTP в веб-службах возникли разногласия. Сейчас существует 2 противоположных лагеря. Одни считают, что надо ориентироваться на 2 типа запросов. Запрос GET может только получать информацию, и ничего не меняет в ней; дайте подряд несколько запросов GET с одним URL - и каждый раз будете получать одну и ту же информацию. Для изменения информации служит запрос POST. Этот лагерь получил название REST, REpresentational State Transfer.

Второй лагерь придерживается функционального взгляда. Изначально был разработан протокол XML-RPC (XML Remote Procedure Calls), позволяющий удалённо вызывать методы (функции), передавать им параметры (упакованные в XML), и получать ответ в виде XML. В дальнейшем этот протокол был развит и переименован в SOAP, Simple Object Access Protocol.

В настоящий момент у REST значительно больше сторонников, чем у SOAP. Это хорошо видно по статистике использования веб-служб на тех сайтах, которые реализовывают оба подхода.


Эта страница http://phdru.name/Russian/Software/xml_web_services.html была сгенерирована 08.06.2014 в 20:51:52 из шаблона CheetahTemplate xml_web_services.tmpl; Некоторые права зарезервированы. Вы можете узнать о технических аспектах этого сайта.