読者です 読者をやめる 読者になる 読者になる

JSONICを本来の目的ではないことに使う事について考えてみた

Java Sinatra

JSONICJavaJSONエンコード・デコードを扱う為のライブラリですが、「エンコード・デコード」する為の機能でわざわざライブラリを追加しないといけないなんて面倒くさいなぁ、なんて思う方もいるかもしれませんが、以外とJSON関係機能ではないおまけ機能(失礼な言い方w)が面白かったので紹介します!

それがなにかといいますと、JSON API以外にWEBサービス APIも実装されているからです。

JavaScriptでない場合にJSONを使いたい場合って、「リクエストを受ける側のサーバーサイドのAPIを作りたいぜ」という事が多いと思います。そういう時はURL設計から入ったり、RESTを意識した作りにしたいですよね。

そこで柔軟に設定できて大きなMVCフレームワークって使いたいか?というとViewは必要ないし、もっと手軽に着手したいからRailsよりSinatraでいいぢゃん。DSLの使い方もいい感じだし。という話しになると思うんですね。*1

Javaでもやっぱり、慣れている「設定よる柔軟なMVCフレームワーク」や「規約で設定をあまり書かなくてもいいフルスタックMVC」をこのケースで使わなくてもいいと思いますし、素のServletから1から書くのは面倒だなとなります。そこで「Sinatra使おうよー」的なノリでできるのが、JSONICの「JSON関係以外の機能」です。

JSONICではURLパスに対して、「HTTP Method」「呼び出すメソッド名」「Service名」を組み合わせてたった一行で記述する事ができます。

【Web Service Servlet設定ファイル】

<servlet>
  ...
  <init-param>
    <param-name>config</param-name>
    <param-value>
    {
      "mappings": {
       // GET *.csvにアクセスされた場合はprintメソッドを呼び出します。
        "/{package}/{class}.csv": ["sample.web.${package}.service.${class}Service", {"GET": "print"}]
        "/{package}/{class}.{ext}": "sample.web.${package}.service.${class}Service"
      }
    }
    </param-value>
  </init-param>
</servlet>

これくらい準備が簡単*2なら「ちょっとアイディア思いついたから作ってみるか。」とか「ちょっとお試しでやってみましょうよ」など行動に直結する影響を与えそうだなと。
あと、DI対応やFilter機能があったりしているんですよね。

面白いと思ったところ

【ライブラリとしての棲み分け】

  • JSONライブラリだから、JSONを扱う機能(エンコード・デコード)に特化して最小限のライブラリを提供

ではなく、

【目的に対しての後押し】

  • あなたはJavaJSONを使いたいんだからきっとこんな感じで使えたらうれしいんでしょ。

という思考が見えるところです。

公式サイトでは

JSONICとは

JSONICは、Java用のシンプルかつ高機能なJSONエンコーダー/デコーダーライブラリです。

と紹介していますが、この短い文章に隠れている背景が見えたので面白いなーと。
材料という単位ではなく料理っぽく作られているところが特に面白かったです。

このエントリーを書き始めた時は、「JSONIC面白いなー」の一言・二言くらいで終わらせるつもりが長くなってしまいました。
JSONICの機能がすげぇ!というのが言いたくてというより、「なんでそのライブラリを作ったんだろう?」「存在が必要なんだろう?」的なところを考えるのが楽しくて、エントリーが長くなっちゃったのかなぁ。

ということで、JSONICを使う後押しになれば。 :-)

*1:違っていたらすいません

*2:どんな仕組みでも準備して自動化しておけばいいわけですが