POSTメソッドの実行
これまでは,
そこで,
リスト4はクライアントアプリケーションの例です。投稿するデータは,
POSTメソッドの実行は,
リスト4 POSTメソッドを実行するクライアントアプリケーションの例
// 投稿するデータ(パラメータ)をフォームに追加
Form form = new Form();
form.add( "a", "パラメータ1" );
form.add( "b", "パラメータ2" );
// クライアントを準備する
Client client = new Client( Protocol.HTTP );
String url = "http://localhost:8888/";
Representation rep = form.getWebRepresentation();
// 文字コードを指定する場合
// Representation rep = form.getWebRepresentation( new CharacterSet( "Shift_JIS" ) );
// サーバにアクセス
Response res = client.post( url, rep );
リスト5はPOSTメソッドを実行するRestletの例です。クライアントからのリクエストはFormで送信されましたので,
この例では,
リスト5 POSTメソッドによるアクセスを受け付けるRestletの例
Restlet restlet = new Restlet() {
@Override
public void handle( Request request, Response response ) {
// リクエストからFormを取得する
Form form = request.getEntityAsForm();
// パラメータの取得
Parameter a = form.getFirst( "a" );
Parameter b = form.getFirst( "b" );
// 直接データを取得する場合
// String a1 = form.getFirstValue( "a" );
// String b1 = form.getFirstValue( "b" );
// 複数のデータを個別に取得する場合
// String a2 = form.subList( "a" ).get(1).getValue();
// String b2 = form.subList( "b" ).get(1).getValue();
// .......... その他の処理 .....
}
};
BASIC認証を行う
データベースの参照は,
WebブラウザでBASIC認証が必要なWebサイトにアクセスすると,
リスト6がその例です。BASIC認証に関係するのはChallengeSchemeとChallengeResponseです。サーバにアクセスする前にこれらをRequestに設定した上でアクセスします。認証されたかどうかはStatusで判断します。
リスト6 BASIC認証を要求するサーバにアクセスするクライアントアプリケーションの例
// BASIC認証用のリクエストを設定(ユーザ名とパスワード)
ChallengeResponse basicAuth = new ChallengeResponse(
ChallengeScheme.HTTP_BASIC, "username", "password" );
Request request = new Request( Method.GET, "http://localhost:8888/" );
request.setChallengeResponse( basicAuth );
// サーバにアクセス
Client client = new Client( Protocol.HTTP );
Response response = client.handle( request );
// アクセスできたかどうかを確認
Status status = response.getStatus();
if ( status.isSuccess() ) {
// ..... 認証された場合の処理 .....
} else if ( status.equals( Status.CLIENT_ERROR_UNAUTHORIZED ) ) {
// ..... 認証されなかった場合の処理(Status.CLIENT_ERROR_FORBIDDENが返される場合もある) .....
} else {
// ..... その他のエラーでアクセスできない場合の処理 .....
}
一方,
リスト7 BASIC認証を必要とするRestletの例
// RESTアプリケーション
Restlet restlet = new Restlet() {
@Override
public void handle( Request request, Response response ) {
// ..... RESTアプリケーションの処理 .....
}
};
// サーバの設定
Component component = new Component();
component.getServers().add( Protocol.HTTP, 8888 );
// BASIC認証の設定
Guard guard = new Guard( component.getContext(), ChallengeScheme.HTTP_BASIC, "An Interest Products" );
// ユーザ名とパスワード
guard.getSecrets().put( "username", "password".toCharArray() );
guard.setNext( restlet );
// サーバにアプリケーションを設定
component.getDefaultHost().attach( "", guard );
// サーバ起動
component.start();
XMLデータの取得
Web APIの実行結果はXMLデータとなる場合が多いので,
リスト8は,
こうすると,
リスト8 gihyo.
Client client = new Client( Protocol.HTTP );
DomRepresentation rss = client.get( "http://www.pheedo.jp/f/gihyo_rss2" ).getEntityAsDom();
for( Node n : rss.getNodes( "//item/title" ) ) {
System.out.println( "タイトル = " + n.getTextContent() );
}
図3 出力結果(例)
タイトル = 2007年6月8日 《注目》Metisse追加,開発版Video LAN更新,Wackamole/Abraca/Lens追加,PHP5更新,ほか
タイトル = 第2回 Prologをご存じですか?
タイトル = 第2回 対話を促進する学び場の運営ノウハウ[中編] 勉強会当日の進め方
.......... ほかにもいろいろなタイトルが出力される .....
Restletは,
紹介しきれないクラスはまだいろいろありますので,