Статьи

Форматы данных Ajax и Web-сервисов. Часть 3. Пользовательские ответы

Это последняя статья в серии, посвященная форматам данных веб-сервисов для Ajax. Часть 1 рассмотрела XML, SOAP и HTML, а часть 2 — JSON и JSONP . Сегодня мы смотрим на пользовательские форматы данных.

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


The Principles of Beautiful Web Design, 2nd Edition;http://www.sitepoint.com/books/design2/;Jason Beaird;SitePoint;39.95;USD
jQuery: Novice to Ninja;http://www.sitepoint.com/books/jquery1/;JEarle Castledine & Craig Sharkie;SitePoint;29.95;USD
Build Your Own Database Driven Website;http://www.sitepoint.com/books/phpmysql4/;Kevin Yank;SitePoint;39.95;USD

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

В отличие от JSON, мы должны извлекать и анализировать данные из возвращенной строки, но это может быть достигнуто быстро и легко с помощью метода JavaScript split (). Следующий код преобразует данные выше в идентичный формат JSON:

 
// convert custom data to an array of JavaScript objects
function ParseBookData(ajaxdata) {
	var book = [], bookData = ajaxdata.split("n"), bookItem;
	for (var b=0, bl=bookData.length; b < bl; b++) {
		bookItem = bookData[b].split(";");
		book[b] = {
			title: bookItem[0],
			url: bookItem[1],
			author: bookItem[2],
			publisher: bookItem[3],
			price: {
				amount: parseFloat(bookItem[4]),
				currency: bookItem[5]
			}
		};

	}
	return book;
}

var book = ParseBookData(xhr.responseText);
alert(book[0].title); // first book title
alert(book[1].url); // second book URL

JavaScript может обрабатывать данные очень быстро — даже если возвращаются тысячи книг. В большинстве случаев вы обнаружите, что общее время загрузки и анализа данных меньше, чем эквивалентный код Ajax на основе JSON.

Пользовательский формат данных предлагает несколько преимуществ:

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

Но обратите внимание на недостатки:

  • Это может не быть жизнеспособным решением, если количество свойств объекта не согласовано. Например, предположим, что в наших книгах указаны дополнительные URL-адреса PDF или цены в разных валютах. Нам могут потребоваться дополнительные разделители, и наш анализ станет более сложным.
  • Ваш веб-сервис может быть более ограниченным по объему, чем тот, который возвращает XML или JSON. Это не будет проблемой, если вы пишете сервисы для своих собственных приложений, но стоит подумать о том, собираетесь ли вы публиковать данные для третьих сторон.
  • Пользовательский анализатор должен быть написан для каждого типа ответа на данные.
  • Данные не обязательно читаются человеком.
  • Вы должны быть абсолютно уверены, что символы-разделители не отображаются в исходных данных. Вы можете проверить их наличие или рассмотреть возможность использования разделителей в начале набора символов ASCII.

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