PR

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関数)
<?php
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 = <?xml version="1.0" encoding="UTF-8"??>

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)
<?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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

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

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