Clojure で Google App Engine するためのメモページ
Clojure で GAE(Google App Engine)するためのメモ。
逐次追記する予定。
- El Humidor: Clojure on Google AppEngine
- weavejester's compojure at master - GitHub
- src/appengine_clj/users.clj at master from duelinmarkers's appengine-clj - GitHub
- hackers-with-attitude: Interactive Programming with Clojure, Compojure, Google App Engine and Emacs
SLIME
git clone git://github.com/technomancy/swank-clojure.git 現在かなり不安定っぽい。 -> @hchbaw さんに教えてもらって幸せになりました。http://twitter.com/hchbaw/statuses/6895804697
hackers-with-attitude: Interactive Programming with Clojure, Compojure, Google App Engine and Emacs のとおりにすれば、SLIME 上からインタラクティブに開発できる。さいこー!! Lisp たる必須条件だよね。
Compojure
weavejester's compojure at master - GitHub Compojure - Wikibooks, collection of open-content textbooks
メソッドマクロ
- GET
- POST
- PUT
- DELETE
- HEADE
- ANY どれでも ok
URL に対するバインドは : で、取得は :route-params で行う。複数のパラメータの場合は * を使う。ドメイン名でもルーティングできるらしい。
(GET "/posts/:id" ...)
(-> request :route-params :id)
(GET "/foo/*" ...)
(-> request :route-params :*)
静的ファイルをレスポンスするには serve-file を使う。ファイルは public に置く。 404 を返すには page-not-found を使い、public/404.html を用意しておく。
(defroutes main-routes
...
(GET "/*"
(or (serve-file (params :*)) :next))
(ANY "*"
(page-not-found)))
でも Google App Engine ではスタティックファイルが存在するとそちらが優先されること、サーブレットの呼び出しでは MIME タイプを web.xml で指定する必要があることから次のようにしておくのがよいと思う。
(defroutes main-routes
...
(GET "/*"
(or (serve-file "./" (params :*)) :next))
(ANY "*"
(page-not-found "404.html")))
war/
css/
style.css
img/
image.png
404.html
request が持っているもの。
- params → (:params request)
- cookies → (:cookies request)
- session → (:session request)
- flash → (:flash request)
HTML はベクタで書く。属性はマップ。 id と クラスはタグにくっつけられる。
[:h1#title "こんにちは"]
[:form#main.list
[:div.foo.bar "..."]
[:input {:type "text" :name "baz"}]]
appengine-clj
duelinmarkers's appengine-clj at master - GitHub
DataStore, UserService の簡単なライブラリ。これだけじゃ足りないので、自分で実装を追加するか、Java の API をコールすることになる。
Datastore 低レベル API
Key は他のエンティティの参照としてプロパティに保持可能。
KeyFactory.keyToString と KeyFactory.stringToKey によって Key と Web セーフな String を相互に変換できる。ポストパラメータ等には keyToString した Key を使う。
0 件のコメント:
コメントを投稿