なみひらブログ

学んだことを日々記録する。~ since 2012/06/24 ~

golang+EchoでREST APIを作った話

背景

新しいWebアプリ(今回はREST API層だけ)を作るにあたって、これまでJava+SpringFrameworkばかりだったので、他の言語で作ってみることにしました。 (ちょうど仕事上もJava+SpringFrameworkから離れているので)
言語候補として、近くで使っている人が多いのが「Ruby」か「Go」という感じで、ちょうど以下の記事をみて、 employment.en-japan.comWebサービスRubyRails)」が多かったので、「Go言語」を選択した(?)

やったこと

golangをインストールする

自PC(Mac)にGo実行環境がなかったので整備。
以下参照。

Webフレームワークを調べる

golang界隈だと現状「とりあえずこれ」なフレームワークがないらしく、とりあえず少し調べて一番軽量そうだった「Echo」を使ってみることにした。
※それをいうと他の言語も多種多様なフレームワークがあるけど(;´Д`)
Echo - High performance, minimalist Go web framework
以下、参考。

※他に良さげなものがあったら変えるかも。

REST APIを作ってみる

Echo 本家と、Goの仕様を見ながら実装。

package main

import (
        "github.com/labstack/echo"
        "net/http"
        "strconv"
)

type User struct {
        Id    int    `json:"id"`
        Email string `json:"email"`
}

func main() {
        e := echo.New()

        // Routing
        e.GET("/", func(c echo.Context) error {
                return c.String(http.StatusOK, "Hello, World!")
        })
        e.GET("/users/:id", func(c echo.Context) error {
                id, _ := strconv.Atoi(c.Param("id"))
                return c.JSON(http.StatusOK, getUser(id))
        })

        e.Logger.Fatal(e.Start(":1323"))
}

func getUser(id int) *User {
        email := strconv.Itoa(id) + "@example.com"
        u := &User{
                Id:    id,
                Email: email,
        }
        return u
}

以下のコマンドを実行して、http://localhost:1323/users/1234とかにアクセスするとJSONデータが返ってくる。

go run server.go

また、サーバを止める手段がないらしいので

kill -9 {PID}

した(;´Д`)

その他にやったこと

vim環境整備(vim-go)

今回のことぐらいは素のvimでもできるが、シンタックスハイライトが効かないのはさすがに気持ち悪かったので導入(あとで要整備)
以下参照。

※パッケージマネージャは、READMEが分かりやすかった「vim-plug」を選択。

所感

  • 意外とさくっと動いた\(^o^)/
    • が、このままDB連携や認証管理などなどWebアプリまで到達できるか不安(´・ω・`)
  • Go仕様で「関数とメソッド(←?)」「ポインタ」あたりがでてきたとき逃げたくなった(;´Д`)←もっとオブジェクト指向、上位レイヤー寄りかと思っていた。
  • Goについて結構日本語の情報が豊富。
  • GoFmt便利
  • タブの幅(?)もっと狭くしたい。
  • 文字列+数値の連結めんどい(;´Д`)

まとめ

いけるところまでいくε≡≡ヘ( ´Д`)ノ