clase de server xml-xml-RPC CodeIgniter ghidul de folosire RPC

clase XML-RPC vă permite să trimiteți cereri de la un alt server, sau setați propriul server XML-RPC pentru a primi cereri.

Ce este XML-RPC?

Pur și simplu pune, este o modalitate pentru două calculatoare pentru a comunica pe internet folosind XML. Un calculator, numit client. Acesta trimite cererea XML-RPC la un alt calculator, care va fi numit pe server. După ce serverul primește și procesează cererea, acesta trimite înapoi un răspuns la client.

Pentru specificații detaliate, puteți vizita site-ul XML-RPC.

Inițializarea clasa

La fel ca majoritatea celorlalte clase din CodeIgniter, clase XML-RPC și XML-RPCs inițializate în controlerul utilizând funcția de $ this-> a sarcinii> bibliotecă:

Pentru a descărca clasa XML-RPC, utilizați:

Încărcat, clasa de obiect XML-RPC este disponibil pentru utilizare ca $ this-> xmlrpc

Pentru a încărca o clasa XML-RPC Server, utilizați:

Clasa obiect încărcat XML RPCs este disponibil pentru utilizare ca $ this-> xmlrpcs

Notă: Când se utilizează clasa XML-RPC Server, trebuie să descărcați ambele clase - XML-RPC și XML-RPC Server.

Trimiterea de cereri XML-RPC

Pentru a trimite o solicitare XML-RPC la server, trebuie să furnizați următoarele informații:

  • URL pentru server
  • Metoda de server pe care doriți să apelați
  • Date Request (explicate mai jos).

Aici este un exemplu de bază a modului de a trimite un ping simplu Weblogs.com Ping-o-Matic

în cazul în care (. $ this-> xmlrpc-> send_request ())
echo $ this-> xmlrpc-> display_error ();
>

explicație

Codul de mai sus inițializează clasa XML-RPC, setează URL-ul serverului și metoda care urmează să fie numit (weblogUpdates.ping). Cererea (în acest caz, titlul și adresa URL a site-ului dvs.) sunt plasate într-o matrice de transport compilat folosind funcția cerere (). În cele din urmă, cererea completă a fost trimis. Dacă send_request metoda () returneaza FALSE, vom afișa un mesaj de eroare returnat de server XML-RPC.

cerere de anatomie

Cererea XML-RPC este pur și simplu datele pe care le trimite serverul XML-RPC. fiecare bucată de date în cerere se numește parametru de interogare. Exemplul de mai sus are doi parametri: URL-ul și titlul site-ului. Când serverul XML-RPC primește solicitarea dvs., acesta va analiza parametrii pe care o cere.

Parameres solicita să fie plasat într-o matrice de transport, și fiecare parametru poate fi una dintre cele șapte tipuri (siruri de caractere, numere, date și așa mai departe). În cazul în care parametrii sunt de tip diferit decât șir, trebuie să includeți tipul de date în matrice de interogare.

Aici este un exemplu de matrice simplu, cu trei parametri:

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

Dacă utilizați un alt tip de date, cu excepția liniilor, sau utilizați mai multe tipuri diferite de date, trebuie să plasați fiecare parametru în propria sa matrice, cu tipul de date în a doua poziție:

$ Cerere = array (
array ( 'John', 'string'),
array ( 'Doe', 'string'),
array (FALSE, 'boolean'),
array (12345 'int')
);
$ This-> xmlrpc-> cerere ($ cerere); Secțiunea Tipuri Datele de mai jos conține o listă completă a tipurilor de date disponibile.

Crearea de server XML-RPC

serverul XML-RPC rulează ca un inspector rutier, de așteptare pentru cererile primite și direcționarea acestora către funcțiile corespunzătoare pentru prelucrare.

Pentru a crea propriul server XML-RPC, inclusiv inițializarea clasei XML-RPC Server în controlerul în cazul în care vă așteptați cererile primite, și apoi setați matrice de instrucțiuni, care trebuie să fie trimise la cererea de intrare, în care clasa de orice metodă de prelucrare.

$ Config [ 'functii'] = array [ 'new_post'] ( 'funcție' => 'My_blog.new_entry'),
$ Config [ 'functii'] [ 'update_post'] = array ( 'funcție' => 'My_blog.update_entry');
$ Config [ 'obiect'] = $ aceasta;

Exemplul de mai sus include o matrice care prevede două tipuri de solicitări permise Server. Metodele permise în partea stângă a șirului. Când a primit oricare dintre ele, acestea vor fi direcționate către clasa și metoda descrisă la dreapta.

Cheia „obiect“ este o cheie speciala care trece o instanță a unei clase de obiecte, dacă este necesar, atunci când metoda pentru care se face direcția nu face parte superobjects CodeIgniter.

Cu alte cuvinte, în cazul în care clientul XML-RPC trimite o new_post metodă de solicitare. loturile de server My_blog clasa dvs. și solicită new_entry funcția. În cazul în care cererea a venit metoda update_post. încarcă serverului My_blog clasă și solicită update_entry funcția.

Numele funcțiilor în exemplul de mai sus sunt arbitrare. Tu decizi modul în care acestea vor fi numite pe serverul dvs., sau puteți utiliza API standardizate, cum ar fi Blogger sau API MetaWeblog.

Există două taste suplimentare de configurare pe care le puteți utiliza pentru a inițializa clasa de server: byst depanare este setat la TRUE, pentru a permite depanarea și xss_clean poate fi setat la FALSE, pentru a preveni transmiterea de date prin intermediul funcției de biblioteca de securitate xss_clean.

cerere server de procesare

Când serverul XML-RPC primește o cerere și încarcă clasa / metoda de procesare, va trece un obiect această metodă care conține datele transmise de către client.

Folosind exemplul de mai sus, dacă este solicitat new_post metoda. serverul va aștepta o clasă existentă, în conformitate cu acest prototip:

class My_blog extinde CI_Controller

Funcția new_post ($ cerere)

Variabila cerere $ este un obiect compilat de serverul care conține datele transmise de client XML-RPC. Folosind această facilitate, veți avea acces la parametrii de cerere. permițându-vă pentru a procesa cererea. Când ați terminat de procesat, vă va trimite înapoi un răspuns la client.

Mai jos este un exemplu din lumea reală, folosind API-ul Blogger. Una dintre metodele API Blogger este getUserInfo (). Folosind această metodă, client XML-RPC poate trimite serverului un nume de utilizator și o parolă, ca răspuns, serverul trimite înapoi informații despre un anumit utilizator (pseudonim, ID-ul de utilizator, adresa de e-mail, și așa mai departe). Iată ce să caute pentru funcția de procesare:

class My_blog extinde CI_Controller

Funcția getUserInfo (cerere $)
$ Nume = 'smitty';
$ Parola = 'secretsmittypass';

în cazul în care ($ parametrii [ '1']! = numele de utilizator $ și parametrii de $ [ '2']! = $ parola)
reveni $ this-> xmlrpc-> send_error_message ( '100', 'Acces nevalid');
>

notițe

Funcția output_parameters () primește o matrice indexată corespunzătoare parametrilor de solicitare trimise de către client. În exemplul de mai sus, parametrii de ieșire va fi numele de utilizator și parola.

Dacă numele de utilizator și parola trimise de client, nu dreptul, va returna un mesaj de eroare folosind send_error_message ().

În cazul în care operațiunea a avut succes, clientul trimite înapoi un răspuns matrice care conține informații despre utilizator.

răspuns formatare

Precum și cu cererile. răspunsurile ar trebui să fie formatat matrice. Cu toate acestea, în contrast cu cererea, răspunsul este o matrice care conține un singur element. Acest element poate fi o matrice cu mai multe matrice suplimentare, dar ar trebui să aibă un singur indice de primar. cu alte cuvinte, prototipul de bază arată astfel:

$ Response = array ( 'date de răspuns', 'matrice');

Răspunsurile includ de obicei o multitudine de piese de informații. Pentru a face acest lucru avem nevoie pentru a pune propriul răspuns în matrice, astfel încât matrice a conținut o singură bucată pervychny de date. Aici este un exemplu care vă arată cum ar putea arăta:

$ Response = array (
array (
'FIRST_NAME' => array ( 'John', 'string'),
'Last_name' => array ( 'Doe', 'string'),
'Member_id' => array (123,435 'int'),
'Todo_list' => array (array ( 'casă curată', 'suna mama', 'plante de apa'), 'matrice'),
)
'Struct'
);

Observați că matrice de mai sus este formatat ca struct. Aceasta este una dintre cele mai frecvent tip de date pentru răspunsuri.

Ca și în cazul solicitării, răspunsul poate fi unul dintre cele șapte tipuri de date enumerate în tipurile de date.

Trimiterea unui răspuns de eroare

Dacă aveți nevoie pentru a trimite un mesaj de eroare la client, veți utiliza următoarele:

reveni $ this-> xmlrpc-> send_error_message ( '123' 'Datele solicitate nu sunt disponibile',);

Primul parametru este numărul de eroare, iar al doilea parametru este textul mesajului de eroare.

Crearea propriul dvs. client și server

Pentru a vă ajuta să înțelegeți toate ceea ce spunem noi, să creeze un cuplu de controlere care acționează în calitate de client XML-RPC și server. Vei folosi clientul pentru a trimite o cerere către server și de a primi un răspuns.

Notă: În codul de mai sus, am folosit o adresă URL asistent. Puteți găsi mai multe informații despre el pe pagina Helpers.

Încearcă-l!

Acum, vizitați site-ul dvs. utilizând adresa URL corespunzătoare acestei:

Ar trebui să vedeți mesajul transmis de server și răspunsul acestuia.

Clientul ați creat trimite un mesaj ( „Cum merge?“) Server, împreună cu metoda de cerere „Salutări“. Serverul primește cererea și trimite-l la funcția de „proces“, în cazul în care este trimis înapoi răspunsul.

Utilizarea de matrice asociative în parametrul de interogare

Dacă doriți să utilizați un tablou asociativ în parametrii metoda, veți avea nevoie de următoarea structură:

Puteți obține un tablou asociativ atunci când cererea la server.

$ Parametrii = $ request-> output_parameters ();
Parametrii $ Nume = $ [ '0'] [ 'nume'];
$ Dimensiune = $ parametrii [ '1'] [ 'size'];
$ Dimensiune = $ parametrii [ '1'] [ 'formă'];

$ This-> xmlrpc-> Server ()

Setează URL-ul și portul numărul serverului care primește cereri:

$ This-> xmlrpc-> timeout ()

Setează timp (în secunde) după care cererea va fi anulată;

$ This-> xmlrpc-> metoda ()

Setează metoda care va fi solicitată în serverul XML-RPC:

În cazul în care metoda este numele metodei.

$ This-> xmlrpc-> cerere ()

Se acceptă o serie de date și construiește cerere de a trimite server XML-RPC:

$ This-> xmlrpc- send_request> ()

Funcția de trimitere a cererii. Returnează boolean TRUE sau FALSE în funcție de succesul sau eșecul, permițându-vă să utilizați funcția în stare.

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

Aceasta permite depanarea, care va afișa o varietate de date de informații și de eroare utile pentru depanare în timpul dezvoltării.

$ This-> xmlrpc-> display_error ()

Returnează un mesaj de eroare ca un șir de caractere în cazul în care cererea dvs. a eșuat din anumite motive.

$ This-> xmlrpc-> display_response ()

Returnează un răspuns de la serverul de la distanță la solicitarea primită. Răspunsul va fi, de obicei sub forma unui tablou asociativ.

$ This-> xmlrpc-> send_error_message ()

Această funcție a cererii vă permite să trimiteți un mesaj de eroare de la serverul dvs. la client. Primul parametru este numărul de eroare în timp ce al doilea parametru conține textul mesajului de eroare.

reveni $ this-> xmlrpc-> send_error_message ( '123' 'Datele solicitate nu sunt disponibile',);

$ This-> xmlrpc-> send_response ()

Acesta vă permite să trimiteți un răspuns de la serverul de la client. Cu această metodă trebuie să fie trimise matrice de date valide.

$ Response = array (
array (
'Eroare' => array (FALSE, 'boolean'),
„Mesaj“ => „Vă mulțumim pentru ping!“
)
'Struct');
reveni $ this-> xmlrpc-> send_response ($ răspuns);

tipuri de date

În conformitate cu specificația de spec XML-RPC există șapte tipuri de valori pe care le puteți trimite folosind XML-RPC: