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));
}