Scottyで簡易サーバ作成

つくったもの

ScottyでWeb API呼び出しを束ねる(予定)のServerを作成しました。Yesodは、俺にはまだ早かった。

構成

Web Browser -> Web Server (Scotty) -> API Server (Sinatra)

SinatraAPI Server作成

Rubyの方が慣れているので、API Server側はRubyでサクッとつくる。

$ mkdir api
$ cd api
$ bundle init
$ vim Gemfile
$ bundle install

Gemfile

source "https://rubygems.org"

gem "sinatra"

index.rb

require 'sinatra'

get '*' do
  'Hello World!'
end

サーバ立ち上げる

$ ruby index.rb

Scottyでクライアント作成

$ mkdir server
$ cd server
$ cabal sandbox init
$ cabal init
$ vim server.cabal
$ cabal install

server.cabal

-- Initial server.cabal generated by cabal init.  For further
-- documentation, see http://haskell.org/cabal/users-guide/

name:                server
version:             0.1.0.0
-- synopsis:
-- description:
license:             MIT
license-file:        LICENSE
author:              Takeshi Takizawa
maintainer:          takitake.create@gmail.com
-- copyright:
category:            Web
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

executable server
  main-is:             Main.hs
  -- other-modules:
  -- other-extensions:
  build-depends:       base >=4.7 && <4.8
                      ,http-conduit
                      ,scotty
  -- hs-source-dirs:
  default-language:    Haskell2010

Main.hs

{-# LANGUAGE OverloadedStrings #-}

import Web.Scotty
import Network.HTTP.Conduit (simpleHttp)

main :: IO ()
main = scotty 3000 $ do
    get "/:word" $ do
        res <- simpleHttp "http://localhost:4567/"
        raw res

サーバ立ち上げる

# ここの手順が自信ないです
# 今時は、どうやるんだろ?
$ cabal install
$ ./dist/dist-sandbox-4f285b0c/build/server/server

動作確認

ブラウザで、 http://localhost:3000/ にアクセス。Hello World!が表示されること。

所感

Ruby Haskell
Rails Yesod
Sinatra Scotty
httparty http-conduit

かなと。

  • cabal installは、毎回buildするもの?gem installに比べもの凄い時間かかる
  • ByteString.Lazyをどう表示したら良いか分からなくて、コンパイラに散々怒られて辛い