Архитектура web-служб

Автор работы: Пользователь скрыл имя, 12 Января 2014 в 22:01, курсовая работа

Краткое описание

Распределенным называется приложение, отдельные компоненты которого работают на разных компьютерах и используют разные сетевые средства, но взаимодействуют так, что приложение выглядит как единое целое, как будто все его компоненты расположены на одной машине. Простейшая архитектура распределенного приложения, называемая архитектурой клиент-сервер, предполагает, что приложение состоит из двух частей: серверной части, оказывающей услуги, и клиентской части, пользующейся услугой.

Прикрепленные файлы: 1 файл

part06damaged.doc

— 870.00 Кб (Скачать документ)

Синтаксис PHP подобен  синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы  и цикл foreach, заимствованы из Perl.

Для работы программы не требуется описывать какие-либо переменные, используемые модули и  т. п. Любая программа может начинаться непосредственно с оператора PHP.

Фрагмент кода, реализующего простейшую программу на PHP, приведен ниже.

<?php

  echo 'Hello, world!';

?>

PHP исполняет  код, находящийся внутри ограничителей,  таких как <?php ?>. Всё, что  находится вне ограничителей,  выводится без изменений. В  основном это используется для  вставки PHP-кода в HTML-документ.


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

К скалярным типам данных относятся:

- целый тип (integer),

- вещественный тип данных (float, double),

- логический тип (boolean),

- строковый тип (string),

- специальный тип NULL.

К нескалярным  типам относятся:

- «ресурс» (resource),

- массив (array),

- объект (object),

Существует  несколько реализаций поддержки  протокола SOAP в PHP, среди них стоит отметить Pear SOAP, NuSOAP, eZ SOAP. В данном проекте будет использована нативная реализация поддержки SOAP в PHP, использующая стандартные классы SoapClient() и SoapServer().

2.4 Язык WSDL

В ряде случаев  после создания Web-службы ее состав и возможности следует описать, после чего описание зарегистрировать в реестре Web-служб (например, UDDI) или сохранить на сервере Web-службы.

Для описания Web-служб в настоящее время используется язык WSDL. WSDL поддерживает консорциум W3C. WSDL — еще одна реализация XML.

Корневым элементом  документа XML — описания WSDL — служит элемент <definitions>. В этом элементе необязательным атрибутом name можно дать имя описанию.

Кроме того, в  нем размещаются используемых в  описании пространства имен (например, xsd, xsi).

Пространство  имен документа WSDL обычно получает префикс tns (target namespace), идентификатор которого определяется атрибутом targetNamespace.

В корневой элемент <definitions> вкладываются элементы шести основных и двух дополнительных типов.

Все элементы необязательны, их может быть любое количество, за исключением элемента <types>, который может встретиться в документе только один раз. У каждого элемента есть имя, определяемое обязательным атрибутом name. Элементы ссылаются друг на друга с помощью этих имен.

Элементы, вкладываемые в корневой элемент <definitions>:


- <types> — определяет сложные типы, используемые Web-службой, с помощью языка XSD. Этот элемент не нужен, если Web-служба применяет только простые типы, описанные в языке XSD.

- <message> — описывает каждое SOAP-послание: запрос, ответ, пересылку документов. В этот элемент вкладываются элементы <part>, описывающие неделимые с точки зрения WSDL части послания.

- <portType> — описывает интерфейс Web-службы, называемый в языке WSDL пунктом назначения (endpoint) или портом (port) прибытия послания. Он описывается как набор Web-услуг, называемых в языке WSDL операциями.

Операции описываются вложенными элементами <operation>, описывающими каждую отдельную услугу. Услуга описывается действиями, которые разбиты на четыре вида:

1) "получение послания",

2) "отправка ответа",

3) "отправка послания — получение ответа"

4) "получение послания — отправка ответа".

Получение и  отправка, в свою очередь, описываются  вложенными элементами <input> и <output>, а сообщение об ошибке — элементом <fauit>.


- <serviceType> — перечисляет вложенными элементами <portType> набор портов, связанных с одной Web-службой. Один и тот же порт может быть связан с несколькими службами.

- <binding> — описывает конкретный формат пересылки послания: протоколы, такие как SOAP или HTTP, способы упаковки послания, тип его содержимого: HTML, XML или другой MIME-тип послания.

- <service> — указывает местоположение Web-службы как один или несколько портов. Каждый порт описывается вложенным элементом <port>, содержащим адрес интерфейса Web-службы.

 

 

3 ПРАКТИЧЕСКИЙ ПРИМЕР  SOAP WEB-СЛУЖБЫ НА PHP

Для создания SOAP Web-службы на PHP прежде всего необходимо провести установку и настройку PHP, а также локального HTTP-сервера. В данном проекте был использован пакет XAMP, позволяющий провести быструю установку HTTP-сервера Apache и PHP.

Отдельно необходимо внести правки в конфигурационные файлы Apache и PHP.

В конфигурационном файле HTTP-сервера Apache httpd.conf необходимо найти приведенный ниже фрагмент кода.

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Deny from all

    Satisfy all

</Directory>

Далее необходимо закомментировать строку “Deny from all”, с помощью символа #.

Для запуска PHP-скриптов на локальном сервере необходимо хранить их в корневой директории сервера Apache, по умолчанию, папка htdocs в корневой папке Apache. Для изменения корневой директории сайта необходимо внести изменения в файл httpd.conf в строку, приведенную ниже.

DocumentRoot "Apache_home/htdocs"

Для подключения  поддержки PHP в файл httpd.conf необходимо внести следующие строки.

AddType Application/x-httpd-php .php

LoadModule php5_module "php_home/sapi/php5apache2_2.dll"

Для запуска HTTP-сервера Apache можно использовать консольные команды, либо контрольную панель XAMMP, позволяющую управлять состоянием Apache, ф также проводить его конфигурацию.

 

Вид данной утилиты приведен на рисунке 3.1.

Рисунок 3.1 Утилита XAMMP Control Panel


Для создания SOAP Web-службы необходимо написать PHP документы, реализующие клиентскую и серверную стороны приложения, а также WSDL-страницу, для описания Web-сервиса.

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

Клиентская  сторона реализована двумя PHP-документами. В файле form.php при помощи элемента <form> описана форма, в которую пользователь вводит данные. В свойствах формы прописан метод POST, применяемый для извлечения информации из формы и передачи ее в PHP-файл. В данном случае происходит передача введенных пользователем данных в afqk code.php. Элементы <input> описывают текстовые поля для ввода данных и кнопку, при нажатии которой происходит передача данных в файл code.php.

Фрагмент кода, реализующий файл form.php, приведен ниже.

<form method="post" action="code.php">

    Number 1 <input type="text" name="a" />

    Operation <input type="text" name="action" />

    Number 2 <input type="text" name="b" />

    <input type="submit" name="submit" value="Calculate"/>

</form>

В файле code.php создается экземпляр класса клиента и происходит получение введенных пользователем данных и их отсылка в SOAP послании серверу.

Фрагмент кода, реализующий создание экземпляра класса клиента приведен ниже.

$client = new SoapClient("calc.wsdl");

В данном фрагменте  создается экземпляр $client класса SoapClient, выполняющий SOAP-послание в соответствие с конфигурационным файлом cacl.wsdl.[6]

В файле code.php также выполняется присвоение переменным $a, $b, $action значений членов ассоциативного массива $_POST, хранящего полученные из form.php данные. Фрагмент кода, реализующий данные операции приведен ниже.

$a = $_POST['a'];

$b = $_POST['b'];

$action = $_POST['action'];

Далее выполняется  запрос к серверу, содержащий значения переменных $a, $b, $action.

$response = $client->getCalcEntry($a,$b,$action);

Где getCalcEntry() – описанная в WSDL-файле операция, а также функция в серверной части.


В данной Web-службе роль серверной части играет файл calc-server.php. В данном файле происходит объявление и вызов функции getCalcEntry. Данная функция проверяет значение переменной $action, и в соответствии с ним выполняет операцию над переменными $a и $b, записывая результат в переменную $c. Фрагмент кода, реализующий данную функцию, приведен ниже.

function getCalcEntry($a,$b,$action) {           

    if ($action === "+") {$c = $a+$b; }

    if ($action === "-") {$c = $a-$b; }

    if ($action === "*") {$c = $a*$b; }

    if ($action === "/") {

if ($b === 0) $c = “Divide by 0” 

else $c = $a/$b; }

    return $c;

}


Далее выполняется создание экземпляра класса SOAP-сервера.

$server = new SoapServer("calc.wsdl");

$server->addFunction("getCalcEntry");

$server->handle();

В данном фрагменте  метод addFunction() предоставляет доступ к функции getCalcentry удаленному клиенту. Метод handle() выполянет обработку SOAP-запроса, вызов необходимых функций и посылку SOAP-ответа.

Важную роль в работе данной SOAP Web-службы играет файл описания calc.wsdl. В данном файле определены основные параметры SOAP-посланий. Фрагмент кода, отвечающий за реализацию этого, приведен ниже.

<message name='getCalcRequest'>

  <part name='a' type='xsd:string'/>

  <part name='b' type='xsd:string'/>

  <part name='action' type='xsd:string'/>

</message>

<message name='getCalcResponse'>

  <part name='Result' type='xsd:string'/>

</message>

 

 

В данном фрагменте элементы <message> getCalcRequest и getCalcResponse – SOAP-запрос и SOAP-ответ соответственно. В вложенных в <message> элементах определены имена передаваемых переменных и их типы.

Следует заметить, что возможна передача строк (тип string), которые будут преобразованы в числа неявно, благодаря динамической типизации в PHP.

Также важным элементом WSDL-файла является описание интерфейса Web-службы, выполняемое элементом <portType>.


Фрагмент кода, описывающий  интерфейс Web-службы, приведен ниже.

<portType name='CalcPortType'>

  <operation name='getCalcEntry'>

    <input message='tns:getCalcRequest'/>

    <output message='tns:getCalcResponse'/>

  </operation>

</portType>

В данном фрагменте элемент <operation> описывает конкретную услугу getCalcEntry, состоящую из двух действий. Первое действие getCalcRequest представляет собой отправку послания, второе действие getCalcResponse – получение ответа.

Для успешной работы Web-сервиса на локальном сервере необходимо:

  1. Создать отдельную директорию для распределенного приложения в корневой директории сервера Apache. Поместить в нее файлы form.php, code.php, calc-server.php и calc.wsdl.
  2. Запустить Apache, используя консоль либо контрольную панель XAMMP.
  3. В адресной строке браузера ввести адрес клиента Web-сервиса:

> http://localhost/PhpProject3/form.php

 

Результат показан  на рисунке 3.2.

Рисунок 3.2 – Форма ввода данных

  1. Ввести данные в текстовые поля и нажать кнопку Calculate.
  2. В результате во вкладке браузера откроется PHP-страница с выведенным результатом вычислений. Результат работы Web-службы показан на рисунке 3.3.

 

Рисунок 3.3 –  Результат работы Web-службы


Для того, чтобы более  подробно рассмотреть работу SOAP, модифицируем код файла code.php таким образом, что в браузер вместе с результатом вычисления будут выводиться листинги последних SOAP-посланий – запроса и ответа.

Рисунок 3.4 –  Результат работы модифицированной Web-службы

Фрагмент кода, выполняющий данные функции приведен ниже.

print "<pre>\n";

    print "Request:\n".htmlspecialchars

($client->__getLastRequest()) ."\n";

    print "Response:\n".htmlspecialchars

($client->__getLastResponse())."\n";

print "</pre>";

Данный фрагмент содержит стандартные системные методы класса SoapClient __getLastRequest() и getLastResponse(), возвращающие текст SOAP-посланий.


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

 


<SOAP-ENV:Body>

<ns1:getCalcEntry>

<a xsi:type="xsd:string">5</a>

<b xsi:type="xsd:string">3</b>

<action xsi:type="xsd:string">-</action>

</ns1:getCalcEntry>

</SOAP-ENV:Body>

Данный фрагмент содержит тело SOAP-конверта, в которое вложен элемент <ns1:getCalcEntry>, описывающий Web-услугу. В него вложены элементы, хранящие значения передаваемых переменных и их типы данных. Серверу передаются значения чисел 5 и 3, а также символ выполняемой над ними операции вычитания.

Информация о работе Архитектура web-служб