Xml-rpc and xml-rpc server classes codeigniter user guide

Класи XML-RPC дозволяють вам відправляти запити на інший сервер, або встановити власний сервер XML-RPC для того, щоб приймати запити.

Що таке XML-RPC?

Простіше кажучи, це спосіб для двох комп'ютерів спілкуватися через інтернет, використовуючи XML. Один комп'ютер, який називається клієнтом. відправляє XML-RPC запит іншого комп'ютера, який буде називатися сервером. Після того, як сервер приймає і обробляє запит, він відправляє назад відповідь клієнту.

За детальними специфікаціями ви можете відвідати сайт XML-RPC.

ініціалізація класу

Як і більшість інших класів в CodeIgniter, класи XML-RPC і XML-RPCS инициализируются в вашому контролері за допомогою функції $ this-> load-> library:

Щоб завантажити клас XML-RPC, використовуйте:

Завантажений об'єкт класу XML-RPC доступний до використання як $ this-> xmlrpc

Щоб завантажити клас XML-RPC Server, використовуйте:

Завантажений об'єкт класу XML-RPCs доступний до використання як $ this-> xmlrpcs

Примітка: При використанні класу XML-RPC Server ви повинні завантажити обидва класи - XML-RPC і XML-RPC Server.

Відправлення запитів XML-RPC

Щоб відправити запити XML-RPC серверу, ви повинні вказати наступну інформацію:

  • URL сервера
  • Метод сервера, який ви хочете викликати
  • Дані запиту (роз'яснені нижче).

Ось основний приклад, як відправити простий пінг Weblogs.com до Ping-o-Matic

if (. $ this-> xmlrpc-> send_request ())
echo $ this-> xmlrpc-> display_error ();
>

пояснення

Код вище инициализирует клас XML-RPC, встановлює серверний URL і метод, який буде викликаний (weblogUpdates.ping). Запит (в цьому випадку, заголовок і URL вашого сайту) розміщуються в масиві для транспортування, скомпільованого з використанням функції request (). Нарешті, повний запит відправлено. Якщо метод send_request () повертає FALSE, ми відображаємо повідомлення про помилку, повернене XML-RPC сервером.

анатомія запиту

Запит XML-RPC це просто дані, які ви відправляєте XML-RPC серверу. кожен шматок даних в запиті називається параметром запиту. Приклад вище має два параметри: URL і заголовок вашого сайту. Коли XML-RPC сервер приймає ваш запит, він буде дивитися на параметри, які йому потрібні.

Парамери запиту повинні розміщуватися в масиві для транспортування, і кожен параметр може бути одного з семи типів (рядки, числа, дати і так далі). Якщо ваші параметри іншого типу, ніж рядки, ви повинні будете включити тип даних в масив запиту.

Ось приклад простого масиву з трьома параметрами:

$ Request = array ( 'John', 'Doe', 'www.some-site.com');
$ This-> xmlrpc-> request ($ request);

Якщо ви використовуєте інший тип даних, крім рядків, або ви використовуєте кілька різних типів даних, ви повинні помістити кожен параметр в його власний масив, з типом даних у другій позиції:

$ Request = array (
array ( 'John', 'string'),
array ( 'Doe', 'string'),
array (FALSE, 'boolean'),
array (12345, 'int')
);
$ This-> xmlrpc-> request ($ request); Розділ Типи даних нижче містить повний список доступних типів даних.

Створення сервера XML-RPC

Сервер XML-RPC працює як дорожній інспектор, чекаючи вхідні запити і направляючи їх до відповідних функції для обробки.

Щоб створити власний сервер XML-RPC, включите ініціалізацію класу XML-RPC Server в вашому контролері, де ви очікуєте вхідні запити, потім встановіть масив з інструкціями, куди повинен бути відправлений вхідний запит, в який клас яким методом, для обробки.

$ Config [ 'functions'] [ 'new_post'] = array ( 'function' => 'My_blog.new_entry'),
$ Config [ 'functions'] [ 'update_post'] = array ( 'function' => 'My_blog.update_entry');
$ Config [ 'object'] = $ this;

Приклад вище містить масив, який передбачає два типи запитів, дозволених Сервером. Дозволені методи в лівій частині масиву. Коли отримано будь-який з них, вони будуть направлені в клас і метод, зазначені справа.

Ключ 'object' це спеціальний ключ, який ви передаєте примірнику класу об'єкта при необхідності, коли метод, на який ви робите напрямок, не є частиною супероб'екта CodeIgniter.

Іншими словами, якщо XML-RPC клієнт відправляє запит методу new_post. ваш сервер завантажує клас My_blog і викликає функцію new_entry. Якщо прийшов запит методу update_post. ваш сервер завантажує клас My_blog і викликає функцію update_entry.

Імена функцій в прикладі вище довільні. Ви вирішуєте, як вони будуть називатися на вашому сервері, або ви можете використовувати стандартизовані API, такі як Blogger або MetaWeblog API.

Є два додаткових ключа конфігурації, які ви можете використовувати при ініціалізації серверного класу: debug може бисть встановлений в TRUE, щоб включити налагодження, і xss_clean може бути встановлено в FALSE, щоб запобігти відправку даних через функцію xss_clean бібліотеки безпеки.

Обробка серверного запиту

Коли сервер XML-RPC приймає запит і завантажує клас / метод для обробки, він буде передавати об'єкт цього методу, що містить дані, відправлені клієнтом.

Використовуючи приклад вище, якщо запитується метод new_post. сервер очікуватиме існуючий клас, що відповідає цьому прототипу:

class My_blog extends CI_Controller

function new_post ($ request)

Змінна $ request це об'єкт, скомпільований сервером, який містять дані, відправлені клієнтом XML-RPC. Використовуючи цей об'єкт, ви отримаєте доступ до параметрів запиту. що дозволяє вам обробити запит. Коли ви завершите обробку, ви відправите відповідь назад клієнту.

Нижче приклад з реального світу, який використовує Blogger API. Один з методів Blogger API це getUserInfo (). Використовуючи цей метод, клієнт XML-RPC може відправляти сервера ім'я користувача і пароль, у відповідь сервер надсилає назад інформацію про конкретного користувача (nickname, user ID, email address і так далі). Ось як може виглядати функція обробки:

class My_blog extends CI_Controller

function getUserInfo ($ request)
$ Username = 'smitty';
$ Password = 'secretsmittypass';

if ($ parameters [ '1']! = $ username AND $ parameters [ '2']! = $ password)
return $ this-> xmlrpc-> send_error_message ( '100', 'Invalid Access');
>

Примітки

Функція output_parameters () отримує індексований масив, відповідний параметрам запиту, відправлених клієнтом. В наведеному вище прикладі, параметри виведення будуть ім'ям користувача і паролем.

Якщо ім'я користувача та пароль, відправлені клієнтом, неправильні, буде повернуто повідомлення про помилку, використовуючи send_error_message ().

Якщо операція була успішною, клієнт надішле назад у відповідь масив, що містить інформацію про користувача.

форматування відповіді

Також як і з запитами. відповіді повинні форматироваться масивом. Однак, на відміну від запиту, відповідь це масив, який містить єдиний елемент. Цей елемент може бути масивом з декількома додатковими масивами, але він повинен мати єдиний первинний індекс. іншими словами, основний прототип виглядає так:

$ Response = array ( 'Response data', 'array');

Відповіді зазвичай містять безліч частин інформації. Щоб виконати це ми повинні помістити відповідь в власний масив, так щоб первичний масив містив єдиний шматок даних. ось приклад, який показує вам, як це може виглядати:

$ Response = array (
array (
'First_name' => array ( 'John', 'string'),
'Last_name' => array ( 'Doe', 'string'),
'Member_id' => array (123435, 'int'),
'Todo_list' => array (array ( 'clean house', 'call mom', 'water plants'), 'array'),
),
'Struct'
);

Зверніть увагу, що масив вище форматувати як struct. Це один з найбільш частих типів даних для відповідей.

Як і з запитами, відповіді можуть бути одного з семи типів даних перерахованих в розділі Типи даних.

Відправлення відповіді з помилкою

Якщо вам потрібно відправити клієнту повідомлення про помилку, ви будете використовувати наступне:

return $ this-> xmlrpc-> send_error_message ( '123', 'Requested data not available');

Перший параметр це номер помилки, а другий параметр це текст повідомлення про помилку.

Створення ваших власних клієнта і сервера

Щоб допомогти зрозуміти все, про що ми зараз говорили, давайте створимо пару контролерів, які діють як XML-RPC клієнт і сервер. Ви будете використовувати клієнт для відправки запиту серверу, і отримання відповіді.

Примітка: У коді вище ми використовували помічник URL. Ви можете знайти більше інформації про нього на сторінці Функції-помічники.

Спробуйте!

Тепер відвідайте ваш сайт, використовуючи URL відповідає цьому:

Ви повинні побачити повідомлення, відправлене сервера, і його відповідь.

Клієнт, якого ви створили, відправляє повідомлення ( "How is it going?") Сервера, разом із запитом методу "Greetings". Сервер приймає запит і відправляє його функції "process", де відповідь відправляється назад.

Використання асоціативних масивів в параметрі запиту

Якщо ви хочете використовувати асоціативний масив в вашому методі параметрів, вам буде потрібна наступна структура:

Ви можете отримати асоціативний масив при обробці запиту на сервері.

$ Parameters = $ request-> output_parameters ();
$ Name = $ parameters [ '0'] [ 'name'];
$ Size = $ parameters [ '1'] [ 'size'];
$ Size = $ parameters [ '1'] [ 'shape'];

$ This-> xmlrpc-> server ()

Встановлює URL і номер порту до сервера, який приймає запити:

$ This-> xmlrpc-> timeout ()

Встановлює таймаут (в секундах), після якого запит буде скасований:

$ This-> xmlrpc-> method ()

Встановлює метод, який буде запитаний на XML-RPC сервері:

Де method це ім'я методу.

$ This-> xmlrpc-> request ()

Приймає масив даних і будує запит, щоб відправити його XML-RPC серверу:

$ This-> xmlrpc-> send_request ()

Функція відправки запиту. Повертає логічне TRUE або FALSE в залежності від успіху або невдачі, дозволяючи використовувати функцію в умови.

$ This-> xmlrpc-> set_debug (TRUE);

Включає налагодження, яка буде відображати безліч інформації і даних помилок, корисних для налагодження при розробці.

$ This-> xmlrpc-> display_error ()

Повертає повідомлення про помилку у вигляді рядка, якщо ваш запит не був виконаний з деяких причин.

$ This-> xmlrpc-> display_response ()

Повертає відповідь від віддаленого сервера на отриманий запит. Відповідь зазвичай буде у вигляді асоціативного масиву.

$ This-> xmlrpc-> send_error_message ()

Ця фунция дозволяє вам відправити повідомлення про помилку від вашого сервера клієнту. Перший параметр це номер помилки, а другий параметр містить текст повідомлення про помилку.

return $ this-> xmlrpc-> send_error_message ( '123', 'Requested data not available');

$ This-> xmlrpc-> send_response ()

Дозволяє вам відправляти відповідь від вашого сервера клієнту. З цим методом повинен бути відправлений масив коректних даних.

$ Response = array (
array (
'Error' => array (FALSE, 'boolean'),
'Message' => "Thanks for the ping!"
)
'Struct');
return $ this-> xmlrpc-> send_response ($ response);

типи даних

Відповідно до специфікації XML-RPC spec є сім типів значень, які ви можете відправляти, використовуючи XML-RPC: