Первоначальное использование WWW только для доставки информации человеку постепенно сменяется использованием Всемирной Паутины для программного взаимодействия между информационными системами. Новым применением WWW стало использование ее в качестве пространства для распределенного компонентного программирования. В соответствии с этим подходом распределенные приложения строятся на основе сервис-ориентированной архитектуры. Для обращения к сетевым программным компонентам, называемым web-сервисами, используется протокол SOAP (Simple Object Access Protocol). Поскольку SOAP основан на стандарте XML, то он не зависит от используемого языка программирования и операционной системы. Данные передаются в виде текстовых сообщений в формате XML, поэтому могут передаваться с помощью неспециализированных протоколов, например, HTTP или SMTP. Чтобы правильно обратиться к web-службе, нужно знать ее интерфейс. Для описания методов, предоставляемых web-сервисами, и состава передаваемых данных создан язык описания web-сервисов WSDL (Web Services Description Language). А для хранения описаний web-сервисов в специальных реестрах и их поиска разработана система описания, обнаружения и интеграции UDDI (Universal Description, Discovery and Integration).
Среди средств, имеющихся в Perl для работы с web-сервисами, библиотека
package Calculator; # класс, реализующий простой калькулятор
sub add { # сложить
my ($self, $a, $b) = @_;
return $a + $b;
}
sub subtract { # вычесть
my ($self, $a, $b) = @_;
return $a - $b;
}
sub multiply { # умножить
my ($self, $a, $b) = @_;
return $a * $b;
}
sub divide { # разделить
my ($self, $a, $b) = @_;
return $b == 0 ? 0 : $a / $b;
}
1;
Затем разместим на web-сервере CGI-программу, которая будет выполнять роль диспетчера: при обращении по ее адресу будет происходить вызов требуемой web-службы. Она состоит всего из нескольких строк:
use SOAP::Transport::HTTP; # использовать протокол HTTP
SOAP::Transport::HTTP::CGI # для обращения через CGI
# к web-сервисам из этого каталога:
-> dispatch_to('/_Learn/Perl/web-services')
-> handle;
Затем напишем клиента для обращения к web-службам с использованием возможности перенаправления запросов, реализованной в библиотеке
# включаем автоматическое
use SOAP::Lite +autodispatch => # перенаправление запросов
uri => 'urn:Calculator', # к классу Calculator
# при обращении по указанному адресу
proxy => 'http://localhost/cgi-bin/web_soap.cgi';
my $a = 5; # первый и
my $b = 3; # второй проверочные операнды
# вызываем методы класса на сервере:
print add($a, $b) , "\n"; # результат: 8
print subtract($a, $b), "\n"; # результат: 2
print multiply($a, $b), "\n"; # результат: 15
print divide($a, $b) , "\n"; # результат: 1.66666666666667
Для проверки работы этой web-службе была написана другая клиентская программа на языке VBScript. Чтобы показать, как выглядят передаваемые данные, результат работы метода
Рис. 18.4. Пример SOAP-сообщения при обращении к web-сервису
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии