2009/12/21

Clojure で Google App Engine するためのメモページ

Clojure で GAE(Google App Engine)するためのメモ。

逐次追記する予定。

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 件のコメント: