超シンプルなフレームワークを書いた


テンプレートエンジンもORマッパーも組み込んでない軽量なものです。
フレームワークとしての機能はほぼ持たず、フレームワークジェネレータといった方がいいような気がひしひしとします。


主な機能は次の2点で、

        ...

apis:
    foo:
        keys:
          - name: userid
            type:
                name: int
                min:  1
          - name: username
            type:
                name: string
                min:  4
                max:  20

という定義から、

    foo/1/abcd/

のようなパスへのリクエストを、

def foo(raws, values):
    #値はバリデーションされている
    userid, username = values
    ...

関数へのコールに変換するフレームワークを自動生成する、というのがまずひとつめ。


もうひとつは、
リクエストがフレームワークに到達する前に、

   foo/1/abcd/  ->  cache/0/0/1/foo&001&abcd

とまずパスを書き換え、
そのファイルが存在しているなら、リクエストに対し、そのファイルの内容を返すことができる、という点です。
この処理はapacheが黙々と行うので、スクリプトは立ち上がらず、結果として低負荷かつ高速です。


このネタは以前、
http://d.hatena.ne.jp/ruby-U/20090131/1233372302
に書いたものをちょっと練ったものですが、
キャッシュディレクトリの構造について、36進数とかキモイ…ので10進数にしています。
apiの最初のkeyがintかつ0 < minの場合のみキャッシュ可能、となります。
負の数だと

    cache/-/1/0/foo&-10&abcd

とかがあり得て、存在しないパスになってしまうので…


前者がメインで後者がおまけですね、ちょうどいい具合に組み合わせることができそうだったのでまとめてしまいました。


実際にサンプルアプリを作って動かしてみたのがこちら。

http://sp.sorr.biz/hikitter/view/1/
http://code.google.com/p/nawa-framework/source/browse/#hg/trunk/samples/hikitter

xreaに置いています。python2.4だったのでちょっと戸惑ったんですが、2時間ほどでできあがりました。




さて、このフレームワークですが、
いろいろと追加すべき機能がありそうですが、どうしたものかというところです。
何を組み込んだとしても、それがデメリットになることがあるわけで。
何も機能を持たない空っぽのフレームワーク、ただし機能の追加は簡単、という方向なのかなあ?


http://code.google.com/p/nawa-framework/


しかしちょーっと空っぽすぎるw
This project is currently using approximately 45.9 KB (0.0%)