Más contenido relacionado La actualidad más candente (20) Similar a Scotty を利用した "ゆるふわ" Web サービス作成 (20) Scotty を利用した "ゆるふわ" Web サービス作成2. はじめに
Yesod も良いけれど,
ゆるりと,ふわりと,お手軽に
Scotty を使って Web サービスを作ってみましょう
そんな主旨
(Haskell の基本文法については,ここまでの発表で既に触れているに違いない)
3. Scotty 概要
Ruby の Sinatra ライクな Web Framework
‘Scotty is the cheap and cheerful way to write RESTful,
declarative web applications.’
(引用元 → http://hackage.haskell.org/package/scotty)
4. 基本的な書き方
書式: {method} {route-pattern} {したいこと}
get
"/" $
file "/var/www/simple-webapp/index.html"
post "/memos" $ do
data <- jsonData
memo <- saveMemo data
json memo
delete "/memos/:id" $ do
mid <- param "id"
deleteMemo mid
noContent
5. Route Pattern
capture
get "/foo/:bar" のように書くと,これになる
コロンでパラメータを表現できる
regex
正規表現を使える
function
関数でパターンを記述できる
「リクエストの内容が~の時にマッチさせる」みたいな
literal
コロンが特殊扱いされない
基本的に capture をよく
使います
6. Request
request
リクエスト本体
reqHeader
ヘッダを返す
body
ボディを返す
param, params
パラメータを返す
jsonData
ボディをパースして JSON オブジェクトを返す
失敗すると例外が飛ぶ (← rescue で対応)
files
アップロードされたファイルを返す
簡単なことなら
すぐできそうですよね
8. Setting Response Body
text
html
file
json
source
Conduit でボディを構築する
raw
ByteString をそのまま返す
いけそうじゃない?
9. 例外処理
raise :: Text -> ActionM a
当然エラー処理もね
例外を投げる
捕まえないと,クライアントに 500 として返る
rescue :: ActionM a -> (Text -> ActionM a) -> ActionM a
例外を捕まえる
param や jsonData 等で発生する例外を補足して,400 を返すとか
next :: ActionM a
次の Route Pattern に処理を渡す
11. おわりに
気軽さを感じられたでしょうか?
ちょっと persistent 周りがつらかったかもしれませんね…
参考
http://hackage.haskell.org/package/scotty
https://www.fpcomplete.com/school/starting-with-haskell/libraries-andframeworks/persistent-db
http://ocharles.org.uk/blog/posts/2013-12-05-24-days-of-hackage-scotty.html
http://adit.io/posts/2013-04-15-making-a-website-with-haskell.html