Submit Search
Scotty + Aeson + Persistentで作るJSON Web API
•
Download as KEY, PDF
•
2 likes
•
1,449 views
Daisuke Fujimura
Follow
1 of 16
Download now
Download to read offline
More Related Content
Scotty + Aeson + Persistentで作るJSON Web API
1.
Scotty + Aeson
+ Persistentで作るJSON Web API 株式会社Aiming 藤村大介 @ Yesod勉強会第2回, 2012-07-07
2.
自己紹介 • 藤村大介 • http://fujimuradaisuke.com
@ffu_ • 株式会社Aiming所属 • Haskell好きのRuby on Railsプログラマー • 最近はJavaScript/CoffeeScriptもよく書いている • アジアの料理とアメリカのビール、アルザスのワインが好き • ラテンアメリカ文学も好き
3.
ところで、なぜ今JSON Web APIなのか •
なんだか最近JSON Web APIを作る機会が多い • 一つのアプリケーションを複数クライアントで動かす事例が増えてきた • Mobile, PC, iOS/Android Native全部に展開とか • フロントエンドでUIを構築する技術の発達・浸透 • クライアント・サーバーの分業は進みそう
4.
突然ですがYesodはいまいちだと思う • 最近Webデザイン/フロントエンド開発が一段と難しくなってきた気がする • なのでクライアント/サーバーで分業ができないと厳しい •
みなさんHamletとCassiusでプロダクションレベルのレスポンシブなマーク アップできますか? • ようやくsass/lessが浸透してきたのにまた新しい技術を… • しかもほとんど一緒だし… • Web APIとして使うとなるとフルスタックの度が過ぎる • なぜ使う予定のない認証ライブラリのインストールを求められるのか
5.
そこでWeb APIはscottyで作ろうではないか • Web
API作りはDBアクセスとルーティングさえできれば基本OK • 例えばRubyだとWeb API作る時Railsではなくsinatraってのはよくある • ライブラリの依存関係は少ないほうが何かと幸せ • DBはpersistent、JSONはaesonでやってみよう
6.
scottyについて • RubyのsinatraインスパイアのWeb Application
Framework • https://github.com/xich/scotty/ • シンプルなAPI • Yesodと同じくwaiベース
7.
aesonについて • Real World
Haskellの著者、Bryan O'Sullivanさんの作ったJSONライブラリ • https://github.com/bos/aeson • まるでJSONのような構文で書けるDSL(?)が大変便利 • 速いらしい
8.
persistentについて • ご存知Yesod同梱のORM • (しかし、”Object”にマッピングされてる気配は全く無い) •
http://www.yesodweb.com/book/persistent • PostgreSQL, SQLite, MongoDB, MySQLに対応 • QuasiQuoteでテーブル定義、マイグレーションもある • 型チェック付きのSQLって感じで使いやすい
9.
できました • 結論から言うととても幸せな組み合わせでした
10.
persistentとaesonの相性がすばらしかった(1) • テーブル定義したら、それをToJSON/FromJSONのインスタンスにする
11.
persistentとaesonの相性がすばらしかった(2) • すると、DBの行をJSONとして扱える(ToJSONのインスタンスになるので) • なので、scottyでそのままJSONレスポンスとして返せる
12.
persistentとaesonの相性がすばらしかった(3) • 今度はテーブルと同じスキーマのJSONをPOSTすると、 • そのまま行としてDBに入れられる(FromJSONの行として受け取れるから)
13.
これはかなりエレガントなのでは • この記述量でDBからの取得/DBへの追加ができます • すごい!
14.
キラーライブラリの予感 • 依存関係が少ないのでコンパイルも楽 • 型クラスを活かせる •
Web APIならHaskellでもクライアント開発との協働も問題なし • むしろランタイムエラーが無いのでクライアント開発は幸せ
15.
余談 • ちなみに位置情報系のWebサービスを作ろうとしてました • クライアントはBackbone.js,
CoffeeScript、Google Mapsあたりを利用 • 実際のところ、クライアントのコードを書いてる方が長かった… • HTMLテンプレートはmustacheを使った。これも良かった • まだ複雑なことをやってないので、落とし穴がありそう • 認証まわりはまだ未着手。落とし穴はここか…? • Template Haskellを使ったらToJSON/FromJSONにするのも自動でできそうな 気が…
16.
おわり • ご清聴ありがとうございました!
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Download