...

IBM WebSphere sMash PHP 日本アイ・ビー・エム株式会社

by user

on
Category: Documents
17

views

Report

Comments

Transcript

IBM WebSphere sMash PHP 日本アイ・ビー・エム株式会社
IBM WebSphere sMash
ハンズオン・ワークショップ
4.PHP アプリケーション入門【演習資料】
日本アイ・ビー・エム株式会社
日本アイ・ビー・エム システムズ・エンジニアリング株式会社
目次
1. 演習概要 ........................................................................................................................................... 1
2. WebSphere sMash PHP プロジェクトの作成と設定 ....................................................................... 1
2-1. eclipse の起動・プロジェクトの作成と準備................................................................................. 1
3. PHP の基礎....................................................................................................................................... 2
3-1. reset.php の配置......................................................................................................................... 2
3-2. employee.php の作成.................................................................................................................. 2
3-3. sMash アプリケーションの実行・テスト................................................................................... 3
4. PHP on sMash – リソース・ハンドラー ......................................................................................... 4
4-1. employee.php の修正.................................................................................................................. 4
4-2. sMash アプリケーションのテスト ............................................................................................. 4
5. PHP on sMash – グローバル・コンテキスト .................................................................................. 5
5-1. employee.php の修正.................................................................................................................. 5
5-2. sMash アプリケーションのテスト ............................................................................................. 6
6. PHP on sMash – onCreate 関数の実装............................................................................................ 7
6-1. employee.php の修正.................................................................................................................. 7
6-2. sMash アプリケーションのテスト ............................................................................................. 8
7. PHP on sMash – JavaBridge........................................................................................................... 9
7-1. employee.php の修正.................................................................................................................. 9
7-2. sMash アプリケーションのテスト ............................................................................................. 9
8. PHP on sMash – JSON レンダラー ............................................................................................... 10
8-1. employee.php の修正................................................................................................................ 10
8-2. sMash アプリケーションのテスト ........................................................................................... 10
9. PHP on sMash – XML レンダラー..................................................................................................11
9-1. employee.php の修正.................................................................................................................11
9-2. sMash アプリケーションのテスト ............................................................................................11
10. sMash アプリケーションの停止 ................................................................................................... 12
修正履歴
日付
バージョン
修正履歴
2008/09/25
2008/10/01
1.0
1.1
初版
アプリケーションのデザインを変更
sMash ハンズオン W/S 4. PHP アプリ入門
1. 演習概要
この演習では、PHP を用いて、HTTP メソッドに応じて JSON/XML フォーマットのメッセージを返す、簡単な Restful
なリソース・ハンドラー、employee.php を開発していきます。ここでは従業員のデータを持っていることとし、GET メソッド
では一覧の取得と検索、POST メソッドでは登録を行います。今回は DB などを特に用いませんので、グローバル・コン
テキストの storage ゾーンを用いて、データの保存を行っています。
演習の目安は約 40 分です。
※ ハンズオン W/S で行った内容から一部変更しています。
2. WebSphere sMash PHP プロジェクトの作成と設定
2-1. eclipse の起動・プロジェクトの作成と準備
(1)
eclipse を起動します。
(2)
Eclipse のメニュー・バーから、メニューを File > New > Project の順で選びます。
(3)
New Project ダイアログ・ボックスで、WebSphere sMash 下の
WebSphere sMash PHP Application を選択し、Next ボタンを押します。
(4)
新規 Project Zero アプリケーション ダイアログ・ボックスの Project name フィールド
に、 ”handson04.PHP.01.Handler”と入力して、Finish ボタンを押します。
(5)
Project Explorer 上に、handson04.PHP.01.Handler プロジェクトが作成され、
Project Explorer 上に表示されます。
※ C:¥workshops¥materials¥04¥answer ディレクトリには解答例が置かれています。解答例を利用する場合は、ファ
イル名を employee.php にする必要がありますので、ファイルをリネームするか、内容をコピー&ペーストするなど
して利用してください。
-1-
sMash ハンズオン W/S 4. PHP アプリ入門
3. PHP の基礎
この節では、まず PHP 言語に慣れるために、GET メソッドが来たら、従業員一覧をそのまま JSON で返すアプリケー
ションを作成し、実行します。
3-1. reset.php の配置
(1)
今回はデータベースなどを利用しませんので、従業員データを
グローバル・コンテキストの storage ゾーンに作って利用します。
C:¥workshops¥materials¥04¥template ディレクトリから、reset.php をコピーします。
(2)
eclipse のプロジェクトの、public フォルダにペーストします。
この reset.php は、以下のような内容になっています。
<?php
zdelete('/storage/employee');
$arr = array(
0=>array(
"name"=>"Tom",
"updated"=>"2008-07-02 12:24:01"
),
1=>array(
"name"=>"Jane",
"updated"=>"2008-08-10 06:36:29"
),
2=>array(
"name"=>"Joe",
"updated"=>"2008-08-22 23:17:56"
),
);
zput('/storage/employee', $arr);
echo "/storage/employee was reset.";
?>
3-2. employee.php の作成
(1)
これで準備は整いました。今から作る employee.php を、これからずっと改変していくことになります。
プロジェクトの app/resources フォルダを右クリックし、New > PHP File を選択します。
(2)
File name を employee.php にし、Finish を選びます。
(3)
ソースコードを書きます。行うことは次の通りです。
y
zget 関数を用い、/storage/employee から従業員データを取得します。
y
zput 関数を用い、/request/headers/out/Content-Type に text/json をセットします。
y
echo 関数と json_encode 関数を用いて、従業員データを JSON フォーマットに変換して出力します。
以下にコードの例を示します。
-2-
sMash ハンズオン W/S 4. PHP アプリ入門
コードの例(C:¥workshops¥materials¥04¥answers¥employee1.php)
<?php
$lst = zget('/storage/employee');
zput('/request/headers/out/Content-Type', 'text/json');
echo json_encode($lst);
?>
3-3. sMash アプリケーションの実行・テスト
(1)
プロジェクトをクリックして選択し、Run > Run As.. > WebSphere sMash Application を選択します。
(2)
Console でアプリケーションが起動したことを確認し、Firefox を起動します。
(3)
ブラウザで、http://localhost:8080/reset.php にアクセスします。これでグローバル・コンテキストに値がセットされ
ました。このファイルは、アクセスされるたびにデータをリセットしますので、今後のテストに適宜利用して下さい。
(4)
表示 > サイドバー > Poster を選択します。
(5)
Poster の URL に http://localhost:8080/resources/employee と入力し、Actions ペインで GET メソッドが選択さ
れていることを確認して GO ボタンをクリックします。
(6)
従業員の一覧が JSON 形式で表示されれば成功です。失敗した場合は、以下の点を確認してみてください。
y
y
レスポンスボディが空で返ってくる場合
y
reset.php にアクセスしましたか。
y
/storage/employee のスペルをチェックしてみて下さい。
Status Code が 404 で返ってくる場合
y
/app/resources に employee.php を配置しましたか。
y
URL の指定が/resources/employee ではなく、/resources/employee.php になっていませんか。
-3-
sMash ハンズオン W/S 4. PHP アプリ入門
4. PHP on sMash – リソース・ハンドラー
この節では、先ほど作成した employee.php を修正し、リソース・ハンドラーの書式に書き換えます。
4-1. employee.php の修正
employee.php のソースコードを書き換えます。行うことは次の通りです。
y
クラスを作ります。
y
onList 関数を作ります。
y
onList 関数の中に、先ほどの処理を記述します。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee2.php)
<?php
class employee {
function onList() {
$lst = zget('/storage/employee');
zput('/request/headers/out/Content-Type', 'text/json');
echo json_encode($lst);
}
}
?>
4-2. sMash アプリケーションのテスト
先ほどと同様に、Poster を利用してデータが返ってくるかどうかテストしてみて下さい。onList 関数が自動的に実行さ
れていることがわかるはずです。失敗した場合は、以下の点を確認してみてください。
y
クラス名は、ファイル名と同一になっていますか。
-4-
sMash ハンズオン W/S 4. PHP アプリ入門
5. PHP on sMash – グローバル・コンテキスト
この節では、先ほど作成したアプリケーションに、グローバル・コンテキストを利用して検索機能を実装します。
5-1. employee.php の修正
employee.php のソースコードを書き換えます。行うことは次の通りです。
y
onRetrieve 関数を作ります。
y
zget 関数を用い、/storage/employee から従業員データを取得します。
また、/request/params/employeeId から、ID(ここでは従業員名)を取得します。
y
for ループと list 関数、each 関数を用いて、配列内を走査し、
ID と比較し、一致したら array_push 関数を用いて元の配列に加えます。
y
検索結果が 0 件でなければ、json_encode 関数を用いて、JSON フォーマットに変換し、出力します。
y
0 件の場合は、zput 関数を用いて/request/status に 204 をセットします。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee3.php)
<?php
class employee {
function onList() {
$lst = zget('/storage/employee');
zput('/request/headers/out/Content-Type', 'text/json');
echo json_encode($lst);
}
function onRetrieve() {
$lst = zget('/storage/employee');
$rst = Array();
$name = zget('/request/params/employeeId');
for($i=0; $i<count($lst); $i++) {
while (list($key, $value) = each($lst[$i])) {
if ($name == $value) {
array_push($rst, $lst[$i]);
}
}
}
if(count($rst)!=0) {
zput('/request/headers/out/Content-Type', 'text/json');
echo json_encode($rst);
} else {
zput("/request/status", 204);
}
}
}
?>
-5-
sMash ハンズオン W/S 4. PHP アプリ入門
5-2. sMash アプリケーションのテスト
(1)
今回は GET のパラメータを渡す必要があるため、URL が変わります。
例えば、http://localhost:8080/resources/employee/Tom などになります。他はそのままです。
(2)
JSON フォーマットで、指定した従業員のデータのみが表示されれば成功です。正しく動いているかどうか、アドレ
スを Jane や Joe、または存在しないパラメータなどに変えて試してみてください。存在しないパラメータの場合、
Status は 204、メッセージボディは空で返ってくれば成功です。
失敗した場合は、以下の点を確認してみてください。
y
レスポンスボディが空で返ってくる場合
y
クラス名はファイル名と同一になっていますか。
y
/request/params/employeeId から値を取得していますか。
-6-
sMash ハンズオン W/S 4. PHP アプリ入門
6. PHP on sMash – onCreate 関数の実装
この節では、アプリケーションが POST メソッドで呼ばれた際に、渡された値を配列に追加する機能を実装します。こ
こで、POST メソッドで渡される値は JSON フォーマットになっていると想定します。
6-1. employee.php の修正
employee.php のソースコードを書き換えます。行うことは次の通りです。
y
onCreate 関数を作ります。
y
zget 関数を用い、/storage/employee から従業員データを取得します。
y
date_default_timezone_set 関数を用い、Asia/Tokyo にタイムゾーンをセットします。
y
JSON フォーマットを読み込むため、json_decode 関数を利用し、
POST で送られたデータを配列として取得します。
y
その配列に、updated キーを追加し、その値として date 関数で取得した現在時刻を入れます。
y
array_push 関数を用いて、最初の従業員データに、作った配列を追加します。
y
zput 関数を用いて、その配列を/storage/employee にセットします。
また、/request/headers/out/Location に、値がセットされた URL を指定します。
また、/request/status に 201 をセットします。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee4.php)
<?php
class employee {
(省略)
function onCreate() {
$lst = zget('/storage/employee');
date_default_timezone_set('Asia/Tokyo');
$new = json_decode($HTTP_RAW_POST_DATA);
$new['updated'] = date("Y-m-d h:i:s");
array_push($lst, $new);
zput('/storage/employee', $lst);
$locationUri = zget('/request/path') . "/" . $new['name'];
zput('/request/headers/out/Location', $locationUri);
zput('/request/status', 201);
}}
?>
-7-
sMash ハンズオン W/S 4. PHP アプリ入門
6-2. sMash アプリケーションのテスト
(1)
Poster の URL に http://localhost:8080/resources/employee/と入力します。
(2)
Content Type に application/json と入力します。
(3)
Actions のドロップダウンメニューから POST を選択します。
(4)
Content to Send の中に、JSON フォーマットで値を書きます(例:{“name”:”Ken”})。
(5)
GO ボタンを押します。HTTP Status Code が 201、Headers の Location が、
追加した従業員のリソースの位置を示す URL(例:/resoueces/employee/Ken)で返ってくれば成功です。
(6)
GET で List を取得するか、追加した従業員名で検索し、さきほど追加したデータが表示されれば成功です。
-8-
sMash ハンズオン W/S 4. PHP アプリ入門
7. PHP on sMash – JavaBridge
この節では、JavaBridge の使い方を学ぶために、先ほどのアプリケーションで日付と時間を取得していた部分を、
Java に置き換えていきます。
7-1. employee.php の修正
employee.php のソースコードを書き換えます。行うことは次の通りです。
y
java.util.Date クラスを作ります。
y
java.text.SimpleDateFormat クラスを作ります。この時、時刻のフォーマットを指定します。
y
date 関数を用いていた部分を、これらのクラスを用いるように書き換えます。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee5.php)
<?php
include_once 'data.php';
class employee {
(省略)
function onCreate() {
$lst = zget('/storage/employee');
$date = new Java("java.util.Date");
$df = new Java("java.text.SimpleDateFormat", "yyyy-MM-dd hh:mm:ss");
$new = json_decode($HTTP_RAW_POST_DATA);
$new['updated'] = $df->format($date);
array_push($lst, $new);
zput('/storage/employee', $lst);
$locationUri = zget('/request/path') . "/" . $new['name'];
zput('/request/headers/out/Location', $locationUri);
zput('/request/status', 201);
}
}
?>
7-2. sMash アプリケーションのテスト
先ほどと同様にテストします。JavaBridge を用いて現在時刻が取得できていれば成功です。
-9-
sMash ハンズオン W/S 4. PHP アプリ入門
8. PHP on sMash – JSON レンダラー
この節では、json_encode 関数の代わりに json レンダラーを利用します。
8-1. employee.php の修正
employee.php のソースをコードに書き換えます。行うことは次の通りです。
y
json_encode 関数の部分を、json レンダラーに置き換えます。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee6.php)
<?php
include_once 'data.php';
class employee {
function onList() {
$lst = zget('/storage/employee');
zput('/request/headers/out/Content-Type', 'text/json');
zput('/request/view', 'JSON');
zput('/request/json/output', $lst);
render_view();
}
function onRetrieve() {
(省略)
if(count($rst)!=0) {
zput('/request/headers/out/Content-Type', 'text/json');
zput('/request/view', 'JSON');
zput('/request/json/output', $rst);
render_view();
} else {
zput("/request/status", 204);
}
}
function onCreate() {
(省略)
}
}
?>
8-2. sMash アプリケーションのテスト
先ほどと同様にテストします。先ほどまでと同様に、JSON フォーマットで返ってくれば成功です。
- 10 -
sMash ハンズオン W/S 4. PHP アプリ入門
9. PHP on sMash – XML レンダラー
この節では、json レンダラーの代わりに xml レンダラーを利用します。
9-1. employee.php の修正
employee.php のソースをコードに書き換えます。行うことは次の通りです。
y
json レンダラーの部分を、xml レンダラーに置き換えます。
以下にコードの例を示します。
コードの例(C:¥workshops¥materials¥04¥answers¥employee7.php)
<?php
include_once 'data.php';
class employee {
function onList() {
$lst = zget('/storage/employee');
zput('/request/headers/out/Content-Type', 'text/json');
zput('/request/view', 'XML');
zput('/request/xml/output', $lst);
zput('/request/xml/rootElement', 'employee');
zput('/request/xml/idRefs', false);
render_view();
}
function onRetrieve() {
(省略)
if(count($rst)!=0) {
zput('/request/headers/out/Content-Type', 'text/json');
zput('/request/view', 'XML');
zput('/request/xml/output', $rst);
zput('/request/xml/rootElement', 'employee');
zput('/request/xml/idRefs', false);
render_view();
} else {
zput("/request/status", 204);
}
}
function onCreate() {
(省略)
}
}
?>
9-2. sMash アプリケーションのテスト
先ほどと同様にテストします。XML フォーマットで返ってくれば成功です。
- 11 -
sMash ハンズオン W/S 4. PHP アプリ入門
10. sMash アプリケーションの停止
eclipse のコンソール画面から、アプリケーションの停止ボタンをクリックします。
以上で 4. PHP アプリケーション入門の演習は終了です。お疲れ様でした。
これで PHP でのアプリ開発やイベント・ハンドラーの基礎についてご理解頂けたと思います。今回はグローバル・コン
テキストの Storage ゾーンを利用して値を保存しましたが、DB などを用いる場合には、配列の走査などをした部分は、
DB に対する操作などに置き換わります。DB アクセスを用いた、REST の実装に関しては、この 2 つ後のセッション、
REST&DB アクセスで行われますので、そちらを参照してください。
- 12 -
Fly UP