= Rackがあると便利

OpenSocial Containerのサーバー側の実装にCouchDBを使おうとすると、JSON-RPCを何とかする必要がでてきます。Shindig のクライアント側(JavaScript)の実装では、JSON-RPCを使っているからです。OpenSocial v0.9 で定義されるLightweight JavaScript APIJSON-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にマップされますが、OpenSocialJSON-RPC APIREST API の代替なので、REST APIマッピングすることもできます。

で、CouchDBを使うとREST APIは比較的簡単に実装できますね。

というところで、まとめると

(opensocial.* (Shindig JavaScript), osapi.*) --> (JSON-RPC) <- OpenSocial API Proxy -> (REST-API) --> (REST-API) CouchDB

という感じにすれば良さそうです。つまり。

という具合なので、この OpenSocial API Proxy を Apache 上に配置してやればよいのです。ShindigPHPに追加する、でもいいんだけれど、PHP Syntax の Java 実装なのでさわりたくないです。

単なるマッピングなので、Rubyでサクッとやろうと思って、ここでRackが登場、とあいなりました。Apache の上にも置けるし、CouchDBのExternal Processがもう少し汎用的になったら、RackをCouchDBとつないでしまえばいいんじゃん、と思った次第で。