みま

満員電車つらい

EchoでWebサーバを立てる

Echoとは

echo.labstack.com
EchoはGolangの軽量Webフレームワークです。
REST API向けに最適化されたフレームワークであり、拡張性が高く、カスタマイズが容易という特徴があります。
今回、EchoでWebサーバをEchoを立てていきます。

事前準備

Golangの環境設定は省略

$ cd $GOPATH/src
$ mkdir hello
$ cd hello
$ touch hello.go

echoパッケージをインストール

$ go get -u github.com/labstack/echo/…

実装

hello.goを何かしらのエディタで開き、以下のように記述

package main

import (
    "net/http"

    "github.com/labstack/echo"
)

func main() {
    // ルーティングのためのインスタンスを生成
    e := echo.New()

    // ルーティング
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello World")
    })

    // ポート番号を指定して、サーバ起動
    e.Logger.Fatal(e.Start(":1323"))
}

サーバを起動

$ go run hello.go
別タブのターミナル上でリクエストを投げる
$ curl -s -X GET \
  --url 'localhost:1323'
Hello World

これでHello Worldという文字列が返ってきました。

次にJSON形式のものを返すようにします。
先程のmainの上に構造体のコードを記述。

// Userの構造体
type User struct {
  UserID       uint   `json:"user_id"`
  FirstName string `json:"first_name"`
  LastName  string `json:"last_name"`
}

そしてmain関数の中に以下を記述

// JSON形式でUser情報を返す
e.GET("/json", func(c echo.Context) error {
	jsonUser := User{
		UserID:        1,
		FirstName: "hoge",
		LastName:  "fuga",
	}
	return c.JSON(http.StatusOK, jsonUser)
})

最終的にhello.go全体の内容は以下のようになります。

package main

import (
	"net/http"

	"github.com/labstack/echo"
)

 // Userの構造体
type User struct {
  UserID        uint   `json:"user_id"`
  FirstName string `json:"first_name"`
  LastName  string `json:"last_name"`
}

func main() {
	// ルーティングのためのインスタンスを生成
	e := echo.New()

	// ルーティング
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello World")
	})

        // JSON形式でUser情報を返す
	e.GET("/json", func(c echo.Context) error {
		jsonUser := User{
			UserID:        1,
			FirstName: "hoge",
			LastName:  "fuga",
		}
	     return c.JSON(http.StatusOK, jsonUser)
	})

	 // ポート番号を指定して、サーバ起動
	e.Logger.Fatal(e.Start(":1323"))
}

そして起動

$ go run hello.go
別タブのターミナル上でリクエストを投げる
$ curl -s -X GET \
  --url 'localhost:1323/json'
{"user_id":1,"first_name":"hoge","last_name":"fuga"}

これでUser情報がJSON形式で返ってきました。
ただ、これだと1行でズラーっと表示されるので、より見栄えの良い表示をしてくれるjqコマンドというものを使ってJSON形式のものを整形して表示します。
stedolan.github.io

$ curl -s -X GET \
  --url 'localhost:1323/json' | jq
{
  "user_id": 1,
  "first_name": "hoge",
  "last_name": "fuga"
}

これで見栄えの良いJSONが返ってきました。

最後に

Echoで簡単にWebサーバを立てることが出来ました。
Echo以外にもGinやirisといった軽量Webフレームワーク、RevelやBeegoといったフルスタックWebフレームワークなどがあるので、そっちもやっていきたい。