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: