RESTなWebサービスを作ってみる

2010年1月26日(火)
藤本 壱

共通の関数の作成

まず、各処理で共通に使う関数を作ることにします。

今取り上げているWebサービスでは、以下の手順で処理を進めます。

(1)送信されたXMLから、投稿のタイトルなどの情報を読み取ります。
(2)必要な処理を行います。
(3)処理結果を、リスト2のXMLでクライアントに返します。

XMLのデータは、HTTPのリクエスト・ボディを使って送信します。このデータを読み込む処理は、投稿の作成の処理と、編集の処理の際に使います。そこで、この部分は関数化しておくことにします。

また、処理結果を表すXMLは、PHP 5の「SimpleXMLElement」という組み込みクラスで扱うことにします。この初期化の処理も、後の各種の処理で使いますので、関数化しておきます。

上記のそれぞれの処理を、fetch_request_xml/create_response_xmlという関数にまとめると、その内容はリスト3のようになります。リスト3には「subfunc.php」というファイル名を付けることにします。
--------------------------------------------------------------------------------
【リスト3】 subfunc.php(fetch_request_xml/create_response_xml関数)
function fetch_request_xml() {
    // リクエストボディを変数$xmlStrに代入
    $xmlStr = trim(file_get_contents("php://input"));
    // XMLからSimpleXMLElementオブジェクトを作成
    $xml = new SimpleXMLElement($xmlStr);
    return $xml;
}

function create_response_xml() {
    // 空のSimpleXMLElementオブジェクトを作成
    $xmlStr =

HERE;
    $xml = new SimpleXMLElement($xmlStr);
    return $xml;
}
?>
--------------------------------------------------------------------------------

投稿の作成

次に、投稿を作成する処理(post.php)を作ります。このプログラムでは、送信されたXMLから投稿のタイトルと内容を読み取り、それをWordPressのデータベースに保存して、その結果を返す、という処理を行います。

実際のプログラムはリスト4のようになります。WordPressでは、データベースに投稿を保存するAPIが用意されているので、それを利用します(リスト4の15~22行目)。また、投稿の保存に成功したら、その結果をリスト2のようなXMLにして返します(リスト4の24~29行目と40~41行目)。

投稿用のクライアントから投稿した後(図2-1)、WordPressにログインして投稿の一覧を見てみると、投稿が追加されていることが分かります(図2-2)。
--------------------------------------------------------------------------------
【リスト4】 投稿の作成(post.php)
// WordPressのAPIを使えるようにする
define('WP_USE_THEMES', false);
require('../wp-config.php');
// subfunc.phpを組み込む
require('subfunc.php');
// リクエストとともに送信されたXMLを読み込む
$requestXML = fetch_request_xml();
// 結果用のXMLを生成
$responseXML = create_response_xml();
// POSTプロトコルのときだけ処理を行う
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST') {
    // 投稿を新規作成する
    $post = array();
    $post['post_title'] = $requestXML->post_title;
    $post['post_content'] = $requestXML->post_content;
    $post['post_author'] = 1;
    $post['post_status'] = 'publish';
    $post['post_category'] = array(1);
    // 投稿をデータベースに保存する
    $id = wp_insert_post($post);
    // 保存に成功した場合の結果をXML化する
    if ($id) {
        $responseXML->addChild('status', 1);
        $responseXML->addChild('post_id', $id);
        $responseXML->addChild('post_title', $post['post_title']);
        $responseXML->addChild('post_content', $post['post_content']);
    }
    // 保存に失敗したときの結果をXML化する
    else {
        $responseXML->addChild('status', 0);
    }
}
else {
    // POSTプロトコル以外の場合
    $responseXML->addChild('status', 0);
}
// 結果を出力する
header('Content-Type: text/xml; charset=UTF-8');
print $responseXML->asXML();
?>
--------------------------------------------------------------------------------

次ページでは、POSTを使ってWordPressに新規投稿したブログ記事を、他のメソッドを用いて更新/取得/削除する処理を作ります。

1969年生まれ。神戸大学工学部電子工学科卒。ソフトメーカー勤務後、フリーライターとして独立。現在では、パソコン関係およびマネー関係の書籍を中心に執筆活動を行っている。ブログ「The blog of H.Fujimoto」は、Movable TypeやWordPressの情報を中心に毎日更新している(http://www.h-fj.com/blog/)。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています