2006-02-28

REST:Restletについて

REST:RESTとは(1)でJavaServletのAPIの範疇でRESTが可能であることをちらっと書いたが、RESTのためのフレームワークも存在する。それが「Restlet」(このフレームワーク名を表すときは以降括弧付きで表現し、括弧が無い場合は一般名詞としてのRestletのこと)である。
今日(2006-02-28)現在の最新バージョンは1.0 beta3。Restlet APIとその参照実装 Noelios Restlet Engine(NRE)の二つで構成されている。

これが、もうちょっと簡単に出来なかったのかな~と思うぐらい何やら複雑っぽいので、とりあえずチュートリアルあたりを読んで、わかったことから書きつらねていきたい。チュートリアル本文と合わせて読んでもらえば、多少の手助けになるかもしれない。

1. Registering the Restlet implementation
NREを使っている限りは不要な話。NRE以外に今のところRestlet APIに対応したRestlet Engine(?)は存在しないのでパス。

2. Retrieving the content of a Web page
Restletはサーバフレームワークであり、クライアントフレームワークでもある。この章ではクライアントフレームワークとしての使い方のサワリが書かれている。

3. Listening to Web browsers
今度は、サーバ側実装のサワリ。AbstractHandlerを継承して、handleメソッドをオーバライド。doGet/Post/Delete/Putのようなメソッドは無いようなので、引数のUniformCallからMethodを取得して、GET/POST/DELETE/PUTを切り換える必要がありそう。それぐらいラッピングしてほしい。
しかも、NREをサーバとして起動しておいて、ハンドラをその上で動かすのではなく、単独のアプリとして作成し、中でHTTPServerを起動するようだ。

4. Overview of a REST architecture
RestletはHTTP以外にもPOPやSMTPでも運用できるようになっているようだ。そんなことより機能を絞って、簡単な仕組みにして欲しいものだ。

5. Restlets servers and containers
3章ではHTTPServerに直接ハンドラを適用していたが、ここではRestletContainerを作成し、コンテナとサーバを結びつけ、コンテナ上にRestletを登録する形をとっている。Restletはやはりハンドラと作り方が同じ(というかハンドラの一種)、振り分けは自分でやる必要がある。

6. Serving static files
静的コンテンツの公開の仕方。Apacheの設定ファイルでやるようなことを、コードに書いている。この手の事は設定ファイルでやらせてくれないかな。(コンテナへのRestletの登録もそうだが)

7. Chainlets and call logging
ChainletとはServlet APIで言うところのFilterのようなハンドラである。ここではLog出力をしてくれるChainletの使い方を紹介している。
こんなところに力を入れるぐらいなら、HTTPメソッドのラッパーを作ってくれよ。

8. Displaying error pages
エラーステータスページをカスタマイズするためのChainletを紹介。
だからこんな(ry

9. Guarding access to sensitive resources
クッキーに入っているユーザIDなどを利用して認証するためのChainlet。
って、クッキー使ったらRESTfulじゃ無くなるんじゃないの?

10. URI rewriting and redirection
URIのリライト、リダイレクトのやり方。リダイレクト専用のRestletが用意されている。パラメータを自動的にリダイレクト先のURIに変換する仕組みが備わっている。
だからこ(ry

11. Maplets and hierarchical URIs
リソースパスへのハンドラの割り付けをおこなうMapletというハンドラの使い方。実際のディレクトリ構造と異なるような階層でファイルを見せたり、DB上の情報をリソースとして見せることが出来るってところ。
ちょっとこれは便利そう。

12. Conclusion
クラス階層の図。

感想。使えなそう。というか、作者はRESTを勘違いしてるんじゃないか?
もっとイージーにRESTfulなWebアプリを作るためのJavaフレームワークを探すか。いっそ作るか?

REST:RESTとは(1)

yohei-y:weblog: REST 入門が非常にREST(REpresentational State Transfer)の理解の参考になる。自分なりにまとめてみる。

RESTはSOAPと対比されるようにWebサービス実現手段として受け取られる向きが多いが、Web(HTTP)本来の仕組みに忠実に(またはさらに制限を加えて)Webアプリケーションを作るという、アーキテクチャスタイルの事である。

RESTの基本はリソースへのアクセスである。URI(Uniform Resource Identifiers)で指定したリソースに、指定したメソッドに応じたアクションを行う。
リソースというのは、そのままリソースのことである。URIは名前そのまま、リソースを識別するための物である。URIを指定すれば必ず目当てのリソースを取得することが出来る。

メソッドについては以下の5つのポイントを守ること。
  • GETはリソースを取得するメソッド
  • PUTはリソースを更新するメソッド
  • DELETEはリソースを削除するメソッド
  • POSTはリソースを新規作成するメソッド
  • GETはリソースに副作用を与えない(GETで操作をしない)

特に、Java Servletの世界では、POSTとGET以外のメソッドを使うことはまず無いため、GET、POSTを濫用している場合がほとんどであるといえる。(一応、doPut、doDeleteというそれぞれのメソッドを扱うためのインタフェースは用意されていますが)

たとえば、
http://localhost:8080/MyApp/ItemServlet?action=delete&id=4797327936
のように、DELETEメソッドを使わずに、GETメソッドで削除処理を行う(URIへのアクションの挿入)といった事が行われる。
また、POSTは単にGETと違ってURIの長さ制限に掛からない、無制限な長さの情報をサーバに渡す手段として利用される。

RESTに則れば、上に様な例は、
http://localhost:8080/MyApp/Item/4797327936/
にDELETEメソッドを発行すれば良いことになる。

ただ、Servletでこのような実装がなされるのは、人間系に合わせ、選択、確認などのステップを踏むためであると思う。(DELETEメソッドを発行したのに、削除されずに確認画面が出るのも、GETやPOSTで確認画面が出るのもREST的にはおかしい)
というわけで、人間系においてまでRESTを適用するのは問題があるように感じる。RESTを適用するにはAJAXやFlashのようなリッチクライアントが不可欠となるだろう。

長くなってきたので、続きはまた。

2006-02-27

おかいもの:HOME MADE 家族 Musication


「サルビアの花」、「JOYRIDE」、「少年ハート」と気になってた曲がこのHOME MADE 家族の曲だと知って、その曲がまとめて入ったこのアルバムを購入しました。
カラオケ向けに覚えようとしてるのは、「少年ハート」。ですが、「Music & communicaton」や「Shall we 乱舞!?」も非常にノリがよくてお気に入り。

2006-02-26

雨のスキー場

昨日の夜から家を出て、会社の同僚たちと雪山へ行ってきました。

スキー場に着いたころは天気も大丈夫だったのですが、仮眠から目覚めると土砂降り。雪は既にシャーベット状だったので、多少濡れることは覚悟してましたが土砂降りとは・・・。
せっかく時間を作ってみんなできてるので、気合ですべることにしましたが、長年使ってる自分のウェアは親水性抜群(ぉ。あっという間にびしょびしょです。それでも朝4時から滑り始めて、7時半ごろまでは滑ってました。
さすがに身体が冷え切ってきたので、レストハウスでウェアを乾かしながら休憩。袖、裾、グローブは絞れるほど濡れてます。
みんなと相談して、適当に滑った後、飯食って、温泉に入って帰ることに。
メニュー豊富な駐車場そばのレストハウスがオープンする8時半まで滑りたい人は滑り、自分と数人はストーブの周りで雑談。気づいたら時間が来てたので、滑りつつ駐車場付近まで。

飯はあい丼という牛丼にカレーがかかってるようなもの。飛騨牛を使ってるらしいことを後で知ったが後の祭りってやつで、そんなに味あわずに食べちゃいました。

写真は、帰り際にとった雨のスキー場。


非常に悔いの残る今回のスノボでしたが、次に来るときはもっとコンディションが悪くなってるでしょう。1、2、3月と1回ずつをノルマとしてましたが、3月は断念かもしれません・・・。

2006-02-22

mini AQUA

こんなのを見つけました。

mini AQUA

ちょっと和む。

気が向いたら、テンプレートに追加しておこう。

2006-02-19

おかいもの:PS2ソフト 新鬼武者



バイクのカウルに入ってしまったヒビや傷を直すための道具/素材を買いに行ったついでに、
通りのゲームショップで以前SSXと購入するかどうか迷った「新鬼武者」を購入してしまいました。ツーリスト・トロフィーはまた今度。

これまでの鬼武者シリーズのバッサバッサと敵をなぎ倒していく爽快感はそのままに、一線を画すのは、従者システムという存在。これまでも、謎解き時に別キャラを操ってからくりを解いたり、一緒に攻撃に参加したりといったことはありましたが、今回は任意のタイミングでキャラクターの切替を行えるようになっています。また、過去クリアーしたマップに戻ることが出来、クリアー時に使えなかった仲間を連れて行くことで、それまで取ることの出来なかったアイテムをとったり、いくことの出来なかったエリアに行けるようになったりします。
あと、これまで本編外であったミニゲームが一部ゲーム内のイベントとして行えるようになりました。



2006-02-13

JavaScript:Amazon Webサービス

Amazon Webサービスを使用しての製品情報表示をIEでもできるように、JavaScriptを修正しました。
また、スクリプトファイルを分離したので、他の方にも利用していただけるようになりました。
ブログなどに購入した商品の情報を簡単に載せたいという方、ぜひご利用ください。

使い方:
ブログなどのテンプレートに以下のようなタグを埋め込み、
<script type="text/javascript" src="http://www.k5.dion.ne.jp/~forza/Ajax/AruProAmazonLink.js"></script>

bodyタグのonloadでarupro_amazon_linkを呼んでください。
<body onload="arupro_amazon_link();"></script>


aタグのname属性に"asin"、href属性にasinコードを記入しておくと、そのタグのあるところに製品情報を挿入します。
<a name="asin" href="{表示したい商品のASINコード}"></a>


修正する場合は、以下のリンクからダウンロードし、適当なサーバに配置してご利用ください。
JavaScript : AruProAmazonLink.js
結果変換用XSLT : amazon.xsl

使用条件:
ライセンスはApache License Version 2.0に基づくものとします。

Copyright 2006 NAGASAWA Takahiro
Apache License Version 2.0(「本ライセンス」)に基づいてライセンスされます。あなたがこのファイルを使用するためには、本ライセンスに従わなければなりません。本ライセンスのコピーは下記の場所から入手できます。

http://www.apache.org/licenses/LICENSE-2.0

適用される法律または書面での同意によって命じられない限り、本ライセンスに基づいて頒布されるソフトウェアは、明示黙示を問わず、いかなる保証も条件もなしに「現状のまま」頒布されます。本ライセンスでの権利と制限を規定した文言については、本ライセンスを参照してください。

また、使用する際には、設置HPからこのページへリンクしていただけるとうれしいです。

2006-02-11

映画:イーオン・フラックス

TVCMでもちょこちょこ見てて、気になっていたんですが、いよいよひと月後には公開になるらしい。
イーオン・フラックス
画像クリックでオフィシャルページへ
西暦2011年、品種改良によって発生したウィルスにより人類の98%が死滅。科学者トレバー・グッドチャイルドが開発したワクチンにより、人類滅亡は回避することが出来た。それ以降、人類は汚染された外界と壁で隔てた都市ブルーニャに住み、病気もなく、飢えもなく、戦争もない、完璧な生活を送っているはずだった・・・。


良質なSFアクションの予感・・・。
映画公開は3/11。見に行きたいなぁ。誰か一緒に見に行ってくれる女の子いないかなぁ。

2006-02-08

OpenLaszlo

Open Laszloとは、XMLとJavaScriptでFlushリッチクライアントを作成できるフレームワークです。
FlushなのでAjaxの様にブラウザの違いによる挙動の違いを意識する必要は無いですが、Flushが見れるブラウザで無いと動きません。
ブラウザの違いを意識して、切り換えたり、姑息なコーディングになってしまいがちなAjaxよりも、一つのきれいなコードがFlushさえあれば動くというLaszloの方に魅力を感じます。

動作のイメージとしてはJSPに近いです。サーバサイドに用意したlzxファイル(XMLベースのLZX言語とJavaScriptで書かれたソースファイル)にアクセスしようとすると、サーバ側でFlushコンテンツにコンパイルし、ブラウザ側ではコンパイルされたFlushコンテンツを表示します。また、事前にコンパイルして作成したswfファイルをサーバ上に置いておくことも出来ます。
LaszloJapan
Open Laszlo

Ajax:Prototypeを読む

Hawk's Laboratory : prototype.js 1.4.0を読む
Ajax向けのJavaScript フレームワーク、Prototypeのソースを読んで、中で使われているテクニックを理解しようというBlog記事。

2006-02-07

単車乗りへの道:サイト紹介 バイクDEポレポレ

バイクDEポレポレ
BMW R1100RT に乗ってらっしゃる方のサイトですが、工作室でのカスタムは非常に参考になります。
ロータリーコマンダーの防水加工をこのサイトを参考に行う予定です。
最近ロータリーコマンダーが入手困難になっているようですが、こちらのサイトで公開されている回路図を元にすれば、ロータリーコマンダー互換なスイッチBOXを作成することも可能だと思います。

2006-02-06

単車乗りへの道:ツーリスト・トロフィー

FORZAで遊ぼう!のBBSにて紹介されてますが、SCEJの「ツーリスト・トロフィー」でFORZAが使えるらしいです。


土曜日に見たときはパッケージを手にとったもののスルーして、PS2 新鬼武者かGC SSX on tour withマリオか迷った挙句、SSXの方を購入したのですが。うーむ。これを知ってたら間違いなく買ってたなぁ。どうしよう。買うべきか?

おかいもの:ゲームキューブソフト SSX on Tour with マリオ

ありえないスピード、ありえないトリック、ありえない爽快感。SSXシリーズは全部買ってるけど、どんどん新しいシステムを取り入れて、毎回新鮮な驚きを提供してくれます。
今回の特徴は、既存キャラを使うんじゃなくて、自分でキャラをある程度デザインできることかな。
あと、モンスタートリックが若干難しくなったかな。Trickyや3ではボタンの組み合わせで「離れ業」が出来たんだけど、Cレバーによるコマンド入力に変更になった。その代わり組み合わせパターン分しか使えなかったトリックがコマンド入力で全種類を使い分けることが出来るようになった。難易度はUPしたけど、モンスタートリックを繋げてもっとありえない動きにすることが可能になった。
旧作もご紹介。
初代以降はGC版を買い続けてます。
って、ギャー。PS2にもPSPにもあったんか。ご近所のトイザらスにには無かったぞ?!

2006-02-05

単車乗りへの道:こけた&ウィンカー交換

こけました。
こけたのは木曜日(2/2)の朝。出勤するため駅に向かう途中、交差点を曲がろうとしたところでいきなり放り出されました。
打ち身、擦り傷はあるものの人間のほうはまあまあ無事。バイクのほうも動かなくは無いけど、こけた側が傷だらけ。さらにインナーが割れちゃってます。
せっかくのぺいんとがぁぁぁぁぁぁ。
悲しいですが、歪んだインナーを直しつつ、出来上がってたフロントウィンカーを交換してみました。
ポジション時は白く。
ウィンカー、ハザード時は黄色に光るようにしてあります。
ちょっと、左側光量が足らない?作業中にLED死んじゃったかな?
いかがでしょう?
レンズ内側をヤスリがけしたおかげで、横から見ても点灯しているのがわかります。