Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #83, НОЯБРЬ 2005 г.

Самопальный сервис

eto'o

Хакер, номер #083, стр. 083-124-3


Запрос в XML-RPC состоит из двух частей: метода и блока параметров. Каждому методу можно поставить в условное соответствие некоторую функцию, определенную на твоем языке программирования. Понятно, что параметры - это передаваемые нашим функциям переменные. Параметры могут быть разнотипые по своей природу: строки, целые числа, массивы - поддерживаются основные структуры данных. Помимо этого в XML-RPC присутствуют дополнительные тэги для обработки ошибок, но я об этом рассказывать не буду. Если это и впрямь тебе интересно, стоит обратиться к документации на нашем диске.

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

По существу такое общение мало отличается от локального вызова процедур. Все тоже самое: определяется имя функции, фиксируется набор параметров, получается результат работы.

Чтобы не быть голословным, рассмотрю конкретный пример XML-RPC-запроса для сервера:

[пример запроса]

POST /xmlrpc.php HTTP/1.1

User-Agent: Cool XML-RPC Client v X.X

Host: cool.xml.rpc.service.com

Content-type: text/xml

<?xml version="1.0"?>

<methodCall>

<methodName>getNumberBots</methodName>

<params>

<param><value><int>43</int></value></param>

</params>

</methodCall>

Ответ web-сервиса выглядит примерно следующим образом:

[ответ web-сервиса]

HTTP/1.1 200 OK

Date: Mon, 10 Oct 2005 19:36:56 GMT

Server: Apache/1.3.29 (Unix)

X-Powered-By: PHP/5.0.1

Content-Length: 138

Connection: close

Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>

<methodResponse>

<params>

<param>

<value><int>16</int></value>

</param>

</params>

</methodResponse>

Думаю, на этом можно завершить рассказ о самом протоколе XML-RPC. Ты получил примерное представление о нем, и этого достаточно для дальнейшего понимания статьи. Тем более, что всю работу по составлению, парсингу запросов и ответов, берут на себя различные расширения, которые можно найти почти для любого языка программирования. Они поставляются в самых разнообразных вариантах - в виде dll, PHP-классов и модулей, для установки которых нужно пересобирать интерпретатор твоего языка. Мы для простоты и удобства будем использовать в наших разработках PHP. В качестве реализации XML-RPC я выбрал пакет, поставляемый через PEAR: http://pear.php.net/package/XML_RPC. Это быстро и удобно. Если тебе интересно узнать об альтернативных пакетах, то почитать об этом можно в соответствующей врезке.

[свой сервис]

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

Назад на стр. 083-124-2  Содержание  Вперед на стр. 083-124-4