RESTful Webサービス

最近、RESTという言葉をよく耳にするので、以前から気になっていた本。先日のデブサミ2009でMSのAzureのセッションを聞いた時にも、Cloud Computingの要素技術としてRESTが挙げられていて、オライリーのブースで販売されていて、いつものように10%引きだったので購入した。

で読み終えたのだが、正直難しい。”REST”がBuzzwordになっていることは本書の中でも指摘されているが、筆者が考えの根拠としている論文に基づくとRESTfulとは、Buzzwordの元凶となっている自称”REST”サービスとは区別するために、Resource Oriented Architecture(ROA)という筆者の造語で説明されている。平たくいうと、RESTfulないしROA自体は特定の要素技術のことではなく、Webサービス 1 のあるべき姿を示すアーキテクチャ、考え方と言える。

  • リソースを中心に考える

  • 各リソースはステートレスでかつアドレス可能である

    • アドレスつまりURIには処理方法を記述しない

    • リソースと処理を分離する

    • アプリケーションの状態はサーバ側で制御してブラウザのbackボタンが効かないようなつくりにするのではなく、クライアント側で制御できるようにする

など、真のRESTであるには、どうすべきかをサンプルを交えて解説されている。

RESTとはなにかという章もあるにはあるが、そこだけ読んでもどういった考え方で、そのメリット、デメリットは何で、従来の自称RESTのREST-RPCハイブリッド型のサービスに対する優位性などはよく分からない。頭から全部読んでようやく理解できた(気がする)。

ちゃんと理解するにはもう一度読みなおして復習せんとアカンなぁ。

そもそも、この考え方は正しいかどうかよりも、一般的に受け入れられているのか、それともminorityなのかがさっぱりわからないというところも読んでいて思った。

RESTful Webサービス

1

文中でも言及されているが、SOAPやWSDL、UDDIを使ったWebサービスのことではない。

JISエンコードの入力

JISエンコードの入力なんてしないもので、面倒だったのでメモ。普段はja_JP.UTF-8な環境に生活しているのです。例えば、日付をdateコマンドで実行します。

$ date
2009年  3月  3日 火曜日 23:58:52 JST

コンソールにはようされますな。これをカーソルでコピーして、viなどで貼り付けると、UTF-8になってしまいます。出力をリダイレクトしたファイルをfileコマンドで見ると分かります。

$ date > hoge
$ more hoge
2009年  3月  4日 水曜日 00:01:09 JST
$ file hoge
hoge: UTF-8 Unicode text

じゃあ、これをiconvで変換してみます。

$ date | iconv -f utf8 -t ISO2022JP
2009年  3月  4日 水曜日 00:03:10 JST

コンソールじゃわかりません。同様にリダイレクトしてみます。

$ date | iconv -f utf8 -t ISO2022JP > fuga
$ more fuga
2009年  3月  4日 水曜日 00:03:52 JST
$ file fuga
fuga: ASCII text, with escape sequences

viで開いてみるとさらに一目瞭然です。

2009年  3月  4日 水曜日 00:04:49 JST
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"hoge" 1 line, 43 characters
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"fuga" 1 line, 61 characters

じゃあ、このエスケープされたviの画面をコピペするとどうなるか、というと、エスケープシーケンスが効かなくなってしまいました。

$ cat fuga
2009年  3月  4日 水曜日 00:03:52 JST
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST
$ file fuga
fuga: ASCII text, with escape sequences

じゃあ、他のファイルにこの文字列をコピペさせるには?ということで、リダイレクトすると出来るわけです。

2009年  3月  4日 水曜日 00:04:49 JST
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST

~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"hoge" 3 lines, 105 characters

面倒だなぁ。もっと楽にやる方法はないだろうかねぇ。

睡眠時間が結婚前に戻りつつある。

この2、3週間ほどの平日の平均睡眠時間は3時間だろうか。結婚前の残業が多かった時期と同じくらいか。ただ以前と違うのは通勤電車で座れないこと。そのせいで、体の不調が出てきている。

最近、以前よりも何故か電車が混んでいて、各駅に乗っても座れない確率が非常に高い。なので確実に座れるつつじヶ丘始発に間に合う電車に乗り遅れた時は各駅に乗るのを止めてしまった。それによる影響が通勤中の睡眠がなくなった。結果的に睡眠時間が削られるのだが、結婚当初ヨメに合わせて早く寝ていたので体が慣れてしまったのだろう。元々無理もあったのだろう。体がもたない。加えてヨメが就寝時間も最近遅くなってきているし。あ、でもそれは関係無いか。ヨメが寝てから2、3時間後に寝るようになったから。

ウム、少しでも時間を割こうとしたらやっぱり睡眠時間を削って体調が悪くなるという最悪のケースだ。元も子もない。何か他の手を考えるか。

Relax with CouchDB

I joined a Google group as ” Relax with CouchDB “.

IDとパスワードを統一したい。

最近、新しくアカウントを作ってもパスワードを全てかえているので、どのサービスがどのIDとパスワードなのかが分からなくなること多々あり。そんな訳でOpenIDにはちょっと興味があるのだけど、どういうアーキテクチャなのかよく理解していない。というか、理解しようとしていないな。いらないサービスはいっそのこと退会してしまいたいのだけど、結局それもIDとパスワードが分からないと意味がない。色々泥沼化状態。