golang+EchoでREST APIを作った話
背景
新しいWebアプリ(今回はREST API層だけ)を作るにあたって、これまでJava+SpringFrameworkばかりだったので、他の言語で作ってみることにしました。 (ちょうど仕事上もJava+SpringFrameworkから離れているので)
言語候補として、近くで使っている人が多いのが「Ruby」か「Go」という感じで、ちょうど以下の記事をみて、
employment.en-japan.com
「Webサービス+Ruby(Rails)」が多かったので、「Go言語」を選択した(?)
やったこと
golangをインストールする
自PC(Mac)にGo実行環境がなかったので整備。
以下参照。
Webフレームワークを調べる
golang界隈だと現状「とりあえずこれ」なフレームワークがないらしく、とりあえず少し調べて一番軽量そうだった「Echo」を使ってみることにした。
※それをいうと他の言語も多種多様なフレームワークがあるけど(;´Д`)
Echo - High performance, minimalist Go web framework
以下、参考。
- Go 言語 Webフレームワークはこれを使おう 2016年12月版 - Witch on the Other Shore
- Go で API サーバーを開発してきて1年が過ぎました | カメリオ開発者ブログ
※他に良さげなものがあったら変えるかも。
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便利
- タブの幅(?)もっと狭くしたい。
- 文字列+数値の連結めんどい(;´Д`)
まとめ
いけるところまでいくε≡≡ヘ( ´Д`)ノ