PR

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

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

投稿の更新

投稿の更新/取得/削除は、1つのプログラム(edit.php)で行います。更新/取得/削除の判断は、HTTPのメソッド(PUT/GET/DELETE)で行います。

edit.phpの中から、前半部分(更新の処理)を抜き出すと、リスト5のようになります。まず、HTTPのメソッドを、変数「$method」に読み込みます(10行目)。その値が「PUT」である時には、データベースから投稿を読み込み(22行目)、内容を更新して(25/26行目)、保存しなおします(27行目)。そして、保存の結果をXMLにします(28~31行目)。
--------------------------------------------------------------------------------
【リスト5】 投稿の更新(edit.php)
<?php
// WordPressのAPIを使えるようにする
define('WP_USE_THEMES', false);
require('../wp-config.php');
// subfunc.phpを組み込む
require('subfunc.php');
// 結果用のXMLを生成
$responseXML = create_response_xml();
// HTTPのメソッドを調べる
$method = $_SERVER['REQUEST_METHOD'];
// PUTメソッド(投稿の更新)の場合は、
// リクエストとともに送信されたXMLを読み込む
if ($method == 'PUT') {
    $requestXML = fetch_request_xml();
}
// URLから投稿のIDを得る
preg_match('/edit\.php\/(\d*)$/', $_SERVER['REQUEST_URI'], $matches);
$id = intval($matches[1]);
// 投稿の編集(PUTメソッドの場合)
if ($method == 'PUT') {
    // 投稿を読み込む
    $post = get_post($id);
    if ($post) {
        // 投稿のタイトルと内容を更新し、結果をXMLにする
        $post->post_title = $requestXML->post_title;
        $post->post_content = $requestXML->post_content;
        /if (wp_update_post($post)) {
            $responseXML->addChild('status', 1);
            $responseXML->addChild('post_id', $id);
            $responseXML->addChild('post_title', $post->post_title);
            $responseXML->addChild('post_content', $post->post_content);
        }
        // 投稿の更新に失敗した場合
        else {
            $responseXML->addChild('status', 0);
        }
    }
    // 投稿を読み込めなかった場合
    else {
        $responseXML->addChild('status', 0);
    }
}
--------------------------------------------------------------------------------

投稿の取得/削除

投稿の取得/削除も、edit.phpで行います(リスト6)。投稿の更新と同様に、メソッドに応じて必要な処理を行い、その結果をXMLでクライアントに返すようにします。

図3は、このプログラムと連動するためのクライアントの例です。「ID」の欄に投稿のIDを入力し、「投稿を読み込む」のボタンをクリックすると、GETメソッドで通信を行って投稿を取得し、「タイトル」「本文」の欄で編集できるようにしています。

また、タイトルなどを編集して「送信」ボタンをクリックすると、PUTメソッドで通信を行い、WordPressの投稿を更新します。
--------------------------------------------------------------------------------
【リスト6】 投稿の取得/削除
// 投稿の取得(GETメソッドの場合)
elseif ($method == 'GET') {
    // 投稿を読み込む
    $post = get_post($id);
    if ($post) {
        // 読み込んだ投稿の情報をXMLにする
        $responseXML->addChild('status', 1);
        $responseXML->addChild('post_id', $id);
        $responseXML->addChild('post_title', $post->post_title);
        $responseXML->addChild('post_content', $post->post_content);
    }
    // 投稿を読み込めなかった場合
    else {
        $responseXML->addChild('status', 0);
    }
}
// 投稿の削除(DELETEメソッドの場合)
elseif ($method == 'DELETE') {
    // 投稿を削除し、結果をXMLで返す
    $result = wp_delete_post($id);
    $responseXML->addChild('status', $result ? 1 : 0);
}
header('Content-Type: text/xml; charset=UTF-8');
print $responseXML->asXML();
?>
--------------------------------------------------------------------------------

以上で、今回の目的である、WordPressの投稿を追加/編集/削除するWebサービスが完成しました。サンプル・プログラムのソースコードは、こちらからダウンロードできるようにしておきました。

今回で当連載は終了ですが、いかがだったでしょうか。Webサービスの理解にお役に立てば幸いです。

【参考文献】
『RESTful Webサービス』(Leonard Richardson、Sam Ruby著、山本 陽平監修、株式会社クイープ翻訳)(オライリー・ジャパン発行、発行年:2007)

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

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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