Передача данных с помощью web-служб

В своем развитии протоколы Web-сервисов прошли долгий путь, начиная поддержкой очень простых запросов с несложными параметрами и заканчивая полной поддержкой современных объектно-ориентированных языков. Спецификация XML-RPC (Удаленный вызов процедуры на XML), являющаяся, пожалуй, одной из самых ранних форм Web-сервисов, поддерживала только простые типы – строки, целые числа, логические выражения и т.п. Следующим шагом явилось появление в SOAP правил кодирования для объектов. Наконец, последний шаг – улучшение бинарного кода - было введено в документе консорциума W3C "SOAP с вложениями" (SOAP with attachments).

И все же использование текстового кодирования имеет и свои «темные стороны», а XML не располагает действенным способом включения бинарных данных. Согласно рекомендации консорциума W3C «XML-схема» (W3C XML Schema), бинарные данные должен быть закодированы с использованием кода Base-64 или шестнадцатеричного кода. К сожалению, размер данных, закодированных с помощью шестибитного кода (Base-64), оказывается в полтора раза больше по сравнению с размером незакодированных данных. Размер данных, преобразованных в систему счисления с основанием 16, оказывается в два раза больше исходного. Такие накладные расходы приемлемы в случае небольших фрагментов бинарных данных, но для больших наборов данных такой подход неприемлем.

Таким образом, при проектировании Web-сервиса, который использует бинарные данные, следует воспользоваться один из следующих подходов:

· Если набор данных невелик, можно использовать код Base-64 для полезной нагрузки XML; накладные расходы для небольших фрагментов данных не являются серьезной проблемой.

· Если набор данных значителен, включение – единственный практически разумный выбор.

Реализация включений

Разработчики Java могут воспользоваться включениями, используя JAX-RPC (API на Java для RPC, основанного на XML) и SAAJ (API SOAP с включениями для Java). Читателю следует обратить внимание на аббревиатуру SAAJ: JAX-RPC поддерживает включения. Различие между JAX-RPC и SAAJ заключается в уровне абстракции, а не в функциональных возможностях.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: