Статьи

Форматы данных Ajax и веб-служб. Часть 1. XML, SOAP и HTML

Когда Джесси Джеймс Гарретт разработал акроним AJAX, его первоначальное значение было «Асинхронный JavaScript и XML». По сути, вы выполняете этот процесс:

  1. Создайте веб-сервис, например, «страницу» PHP, которая передает HTTP-аргументы GET / POST и возвращает ответ в формате XML.
  2. Написание клиентского JavaScript-кода для использования веб-службы, т.е. передача аргументов и получение XML-ответа. Вызов обрабатывается асинхронно, поэтому браузер не блокируется, пока он ожидает поступления данных.
  3. Разберите XML и обновите HTML-документ соответствующим образом.

Имя AJAX застряло, и этот термин использовался и использовался как разработчиками, так и маркетологами. Сегодня аббревиатура в верхнем регистре превратилась в термин «Ajax» — название для любой техники, в которой данные передаются между браузером и сервером без полной перезагрузки страницы. Причина:

  1. Не обязательно использовать асинхронные методы (хотя обычно это желательно).
  2. Вам не обязательно требовать JavaScript.
  3. Вам определенно не нужен XML.

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

XML

Сначала XML был логичным выбором. Несколько других форматов обмена данными были формализованы, и большинство языков предоставили библиотеки для создания, проверки и анализа данных XML. Даже если ваш язык напрямую не поддерживает XML, это по сути простой текст:


<?xml version="1.0"?>
<products>
	<book>
		<title>The Principles of Beautiful Web Design, 2nd Edition</title>
		<url>http://www.sitepoint.com/books/design2/</url>
		<author>Jason Beaird</author>
		<publisher>SitePoint</publisher>
		<price currency="USD">39.95</price>
	</book>
	<book>
		<title>jQuery: Novice to Ninja</title>
		<url>http://www.sitepoint.com/books/jquery1/</url>
		<author>Earle Castledine &amp; Craig Sharkie</author>
		<publisher>SitePoint</publisher>
		<price currency="USD">29.95</price>
	</book>
	<book>
		<title>Build Your Own Database Driven Website</title>
		<url>http://www.sitepoint.com/books/phpmysql4/</url>
		<author>Kevin Yank</author>
		<publisher>SitePoint</publisher>
		<price currency="USD">39.95</price>
	</book>
</products>

Преимущества XML включают в себя:

  • XML может быть прочитан людьми и его легче понять, чем некоторые другие форматы (при условии, что вы используете понятные теги). В моей предыдущей серии статей « Как создать свой собственный виджет Twitter в PHP» я использовал XML-канал для справки, хотя приложение не использовало его.
  • Большинство языков обеспечивают отличную поддержку XML, включая, что важно, JavaScript.
  • XML предлагает разумную безопасность. Данные должны быть извлечены и проанализированы, чтобы нелегко отправить вредоносную информацию.

К сожалению, при использовании XML есть несколько недостатков:

  • Не всегда будет одобренный отраслевой формат XML (схема) для публикуемых данных. Возможно, вы сможете адаптировать такой формат, как RSS, но даже в этом случае клиент JavaScript должен быть запрограммирован для его понимания.
  • XML может быть многословным с низким отношением данных к структуре. В идеале ответ Ajax должен быть небольшим, чтобы минимизировать пропускную способность и снизить нагрузку на браузер.
  • XML может быть немного неоднозначным. Должен ли элемент данных быть новым элементом или атрибутом для существующего? Вы можете уменьшить размер документа XML, выбрав атрибуты, но это не обязательно является хорошей причиной для их принятия.
  • Синтаксический анализ XML в JavaScript утомителен. Поддержка XPath в лучшем случае неоднородна, поэтому необходимо извлечь данные и преобразовать строку в реальное значение, прежде чем ее можно будет использовать, например,
 
// grab value in first <data> element
var xml = xhr.responseXML;
var nodes = xml.getElementsByTagName("data");
var data = (nodes.length > 0 ? nodes[0].firstChild.nodeValue : null);

Многие разработчики считают XML почти мертвым. Я не согласен. Возможно, это не лучший выбор для клиентов Ajax, но вы не всегда будете знать, как будет использоваться веб-служба. Повсеместность XML делает его отличным выбором — не игнорируйте его.

МЫЛО

SOAP — это стандартизированный формат для обмена данными веб-сервисов. Полная техническая информация охватывает сотни страниц, но, в конечном счете, SOAP опирается на четко определенные схемы XML.

Немногие разработчики используют SOAP напрямую (запах раздает их!) Красота SOAP заключается в том, что клиентские библиотеки автоматически анализируют XML-ответ на нативные объекты. Например, разработчики .NET могут создавать веб-службы и клиенты на основе SOAP без особых усилий. Что касается разработчика, то он просто создает экземпляр объекта C # — не имеет значения, что он был создан на удаленной машине.

К сожалению, корни XML SOAP показывают:

  • SOAP еще более многословен, чем типичный XML-ответ.
  • Разбор SOAP-сообщений в JavaScript остается сложной задачей. Это возможно, и библиотеки SOAP могут помочь , но это требует больших усилий для программиста и браузера.

SOAP остается жизнеспособным выбором для межсерверных коммуникаций, особенно если они находятся в одной сети. Тем не менее, это слишком громоздко, если большинство вызовов от Ajax-запросов.

HTML

HTML — это простой формат, если вы хотите вставить ответ Ajax непосредственно на страницу без дальнейшего анализа. Например, предположим, у вас есть небольшой виджет корзины покупок, который появляется на каждой странице. У вас уже есть серверный код, который создает этот HTML — он может быть адаптирован для возврата того же HTML, что и ответ Ajax при покупке предмета.

Преимущества включают в себя:

  • Легко повторно использовать существующий код и создать веб-сервис.
  • Нет необходимости в сложном анализе данных на клиенте.
  • HTML-код можно быстро добавить на страницу с помощью innerHTML.

Но есть и недостатки:

  • Может быть трудно извлечь полезные данные. Например, если вы хотите показать сумму корзины в другом месте, может быть нелегко определить это значение в HTML.
  • Сообщение более многословно, чем необходимо, и, вероятно, будет больше, чем эквивалентное сообщение XML.
  • Внедрение HTML в страницу может привести к нарушению текущего макета.
  • Безопасность может быть проблемой — ответ может содержать вредоносный скрипт.

В моем следующем посте мы обсудим несколько форматов данных, которые гораздо более эффективны для использования Ajax: JSON и JSONP .