09
sty
10

PHP Api – Zend_XmlRpc

Ostatnio do stworzenia miałem system zarządzania treścią. Wyjątkowo nie był, to zwykły CMS. Klient potrzebował panel administracyjny do zarządzania kilkunastoma stronami (ale nie o tym będę pisał).

Oczywiście najwygodniej było napisać api. Tutaj właśnie pojawił się problem – nigdy wcześniej nie robiłem niczego podobnego, a wszystko musi mieć ręce i nogi. Po chwili poszukiwań okazało się że mam gotowe rozwiązanie. Z pomocą przyszła klasa Zend_XmlRpc.

Klient:

$rpc = new Zend_XmlRpc_Client('http://test.client/api/');

$params = array (
'pageid' => 1,
'title' => $form->getValue('title'),
'text' => $form->getValue('text')
);

try
{
print_r($rpc->call('article.add', $params));
}
catch (Exception $e)
{
echo '<pre>';
print_r($rpc->getLastResponse());
}

Nic, specjalnego. Podajemy adres[1] i wywołujemy funkcję article.add z parametrami[11]

Lokalne użycie tej funkcji wyglądało by tak:

 $cArticle->add(1, $form->getValue('title'), $form->getValue('text'));

Po stronie serwera też nie znajdziemy sprytnych rzeczy.

$cArticle = new Article($db);

$rpc = new Zend_XmlRpc_Server();
$rpc->setEncoding('UTF-8')
->setClass($cArticle, 'article');

//$log = new Zend_Log(new Zend_Log_Writer_Stream('../data/log/rpc.txt'));

$resp = $rpc->handle();
//$log->log($rpc->getRequest(), 1);

echo $resp;

Na początku warto stworzyć obiekt serwera[3] i dodać do niego używane klasy[5]. Fajnym dodatkiem są przestrzenie nazw. Pozostało nam już tylko wywołać funkcję z odpowiednimi parametrami[9] i wysłać odpowiedź do klienta[12].

Aby rozbudować nasze wspaniałe API wystarczy dodać tylko kilka linijek kodu :)

Serwer:

$cArticle = new Article($db);
$cUser = new User($db);

$rpc = new Zend_XmlRpc_Server();
$rpc->setEncoding('UTF-8')
->setClass($cArticle, 'article')
->setClass($cUser, 'user');

Klient:

try
{
print_r($rpc->call('article.add', $params));
$rpc->call('user.add',$userParams));
}




Najnowsze wpisy

 

Styczeń 2012
P W Ś C P S N
« sty    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.