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

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

投稿の更新

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

edit.phpの中から、前半部分(更新の処理)を抜き出すと、リスト5のようになります。まず、HTTPのメソッドを、変数「method10PUT稿22252627XML28315稿edit.php?php<br/?//WordPressAPI使define(WPUSETHEMES,false);require(../wpconfig.php);//subfunc.phprequire(subfunc.php);//XMLresponseXML = create_response_xml();
// HTTPのメソッドを調べる
method=_SERVER['REQUEST_METHOD'];
// PUTメソッド(投稿の更新)の場合は、
// リクエストとともに送信されたXMLを読み込む
if (method==PUT)  $requestXML=fetchrequestxml();//URL稿IDpregmatch(/edit\.php\/(\d)/', SERVER[REQUESTURI],matches);
id=intval(matches[1]);
// 投稿の編集(PUTメソッドの場合)
if (method == 'PUT') {      // 投稿を読み込むpost = get_post(id);  if(post) {
        // 投稿のタイトルと内容を更新し、結果をXMLにする
        post>posttitle=requestXML->post_title;
        post>postcontent=requestXML->post_content;
        /if (wp_update_post(post)) {responseXML->addChild('status', 1);
            responseXML>addChild(postid,id);
            responseXML>addChild(posttitle,post->post_title);
            responseXML>addChild(postcontent,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=getpost($id);  if($post)    //稿XML    $responseXML>addChild(status,1);    $responseXML>addChild(postid,$id);    $responseXML>addChild(posttitle,$post>posttitle);    $responseXML>addChild(postcontent,$post>postcontent);    //稿  else    $responseXML>addChild(status,0);  //稿DELETEelseif(method == 'DELETE') {
    // 投稿を削除し、結果をXMLで返す
    result=wpdeletepost(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 Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

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

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