[cakePHP] XML-RPCしてみた

ちょっとサーバー間で処理をさせたいことがあったのでXML-RPCしてみることにしました。
単純にGETとかPOSTとかでやってもよかったのですが、前からXML-RPCに興味があったのでちょっと勉強がてらやってみました。

前準備

で、簡単に調べたのですがズバリそのもの「How to create an XML-RPC server with CakePHP」ってのがあって、あまりにも簡単に出来すぎて勉強になりませんでしたw

とりあえずこのページからxmlrpc.zipてのをダウンロードしてapp/vendor/xmlrpc.phpにコピー

Controller

ま、これも上のページにサンプルがあるのでまんまコピーでおk
XML-RPCサーバークラスのインスタンスを作るときにコンストラクタにコールバックを渡せばおkなので例えばフィボナッチ数を返す処理をつくろうと思ったらこんな感じで


<?php

// Import the app/vendor/xmlrpc.php library
App::import('Vendor', 'xmlrpc');

class XmlRpcController extends AppController {

// This demo doesn't need models
var $uses = array();

// The XML-RPC server object
var $server = null;

function index() {

// Disable debug information
// Required to generate valid XML output
Configure::write('debug', 0);

// Avoids render() call
$this->autoRender = false;

// XML-RPC callbacks settings
// Use this parameter to map XML-RPC methods to your protected or private controller methods
$callbacks = array();
$callbacks['Fibonacci'] = array(&$this, '_fibonacci');

// Handle XML-RPC request
$this->server = new IXR_Server($callbacks);
}

// Protected Method
function _fibonacci($n) {
if ($n <= 2) {
return 1;
} else {
return $this->_fibonacci($n - 1) + $this->_fibonacci($n - 2);
}
}
}

?>

Client

次はそれを呼び出すクライアントを作ります。
クライアントはcakePHP関係なしな感じです。
コレもサンプルコピペでおkですが、まぁこんな感じで

client.php


<?php
require_once(dirname(__FILE__) . '/xmlrpc.php');

$url = 'http://localhost/xml_rpc';

$client = new IXR_Client($url);

if (!$client->query('Fibonacci', 30)) {
die('Something went wrong - '.$client->getErrorCode().' : '.$client->getErrorMessage());
}
echo $client->getResponse();
echo "\n";

?>

実行してみる

>php client.php
832040

まとめ

てな感じであまりにも簡単すぎるので全くXML-RPCの勉強にはなりませんでしたw
このままだとあんまり意味が無いので今度は別の言語でクライアント実装してみるかなと。。。
そういや昔SOAPとか流行ったからちょっと仕事で使ったけどXML-RPCってそれと同じようなもんだっけ?

Programming Web Services With Xml-Rpc
Simon St. Laurent Joe Johnston Edd Dumbill
Oreilly & Associates Inc
売り上げランキング: 159906
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
Filed under: cakePHP,Programming — maesan 1:47 AM