= Rackがあると便利
OpenSocial Containerのサーバー側の実装にCouchDBを使おうとすると、JSON-RPCを何とかする必要がでてきます。Shindig のクライアント側(JavaScript)の実装では、JSON-RPCを使っているからです。OpenSocial v0.9 で定義されるLightweight JavaScript APIもJSON-RPCを前提にしているようです。
The Lightweight Javascript API, or OS Lite, is more natural to JavaScript developers and more succinct for creating OpenSocial gadgets than the existing JS APIs. It relies on the existing JSON-RPC protocol handlers, and is marked by the use of simple JSON objects as input and output. Note: this implementation follows the JSON-RPC spec 1:1, but could also be implemented over REST.
http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/OpenSocial-Specification.html#LightweightJSAPI
こちらにあるように、Spec上はJSON-RPCにマップされますが、OpenSocial のJSON-RPC API は REST API の代替なので、REST APIにマッピングすることもできます。
で、CouchDBを使うとREST APIは比較的簡単に実装できますね。
というところで、まとめると
(opensocial.* (Shindig JavaScript), osapi.*) --> (JSON-RPC) <- OpenSocial API Proxy -> (REST-API) --> (REST-API) CouchDB
という感じにすれば良さそうです。つまり。
- CouchDB側にREST API用のビューを作っておく。
- OpenSocial API Proxy は JSON-RPC と REST-API の変換を行う。
- JavaScript からは OpenSocial API Proxy を介してアクセスする。
という具合なので、この OpenSocial API Proxy を Apache 上に配置してやればよいのです。Shindig の PHPに追加する、でもいいんだけれど、PHP Syntax の Java 実装なのでさわりたくないです。
単なるマッピングなので、Rubyでサクッとやろうと思って、ここでRackが登場、とあいなりました。Apache の上にも置けるし、CouchDBのExternal Processがもう少し汎用的になったら、RackをCouchDBとつないでしまえばいいんじゃん、と思った次第で。