ブロックストレージサービスで車輪の再開発(4)

言語

今更ですが「車輪の再開発」じゃなくて「車輪の再発明」ですよね…(// ▽ //)

当初は勉強をかねて Elixir で書こうと思っていたんですが、会社の同僚(若者)が「Go どうよ?」「これからツールとかユーティリティ書くなら Go 楽じゃね?」「あー、でもデーモンとかは Go 辛くね?」と、満足にプログラミング一つできない老害な僕に囁いてきたので、なんか時代に乗り遅れてるとか哀れんだ目で見られないように、ちょっと今回は Go で行こうかと思います。

そして折角 Go を使うので、設定やデータは etcd に放り込むことにします。あと WebAPI を実装するために martini を使います。

WebAPI

「そろそろ実装しながら」とか言いながらまだ一行もコード書いてなくてすみません。

とりあえず API は以下のようにします。(初めて書く Go とはいえ、もうちょっとそれなりなものを書けよと自分に言いたい…orz)

package main

import (
    "github.com/go-martini/martini"
)

func main() {
   m := martini.Classic()
   m.Group("/volume", func(r martini.Router) {
      r.Get("/(:id)*", list_volume)
      r.Post("/", create_volume)
      r.Delete("/:id", delete_volume)
   })
   m.Run()
}
func list_volume(params martini.Params) {
   println("list_volume() invoked")
   if "" != params["id"] {
      println("list_volume(): id =", params["id"])
   }
}

func create_volume(params martini.Params) {
   println("create_volume() invoked")

}

func delete_volume(params martini.Params) {
   println("delete_volume() invoked")
}

で、とりあえずこれを実行すると、127.0.0.1:3000 で起動するので、以下のように叩くとログに吐かれます

curl http://127.0.0.1:3000/volume/
curl http://127.0.0.1:3000/volume/1
curl -X POST -H "Content-type: application/json" -d '{"volume_size":1,"volume_name":"volume1"}' http://127.0.0.1:3000/volume/
curl -X DELETE http://127.0.0.1:3000/volume/1

本当は自分で書いたコードにたいして「こーゆーつもりで書いたんですよ」とか恥を晒し…もとい説明しながら進めるべきなんですが、ちょっとコードがスッカスカすぎて何も説明することがないので、とりあえず今日はこれまで。