Go言語のechoフレームワークを使用してAPIサーバーを立てる方法

Go言語のechoフレームワークを使用してAPIサーバーを立てる方法 プログラミング

Go言語でAPIサーバーを建てたいときに便利なフレームワークがechoです。

  • 堅牢でスケーラブルなRESTful APIの構築
  • 高いカスタマイズ性
  • 拡張可能なミドルウェアフレームワーク

echoには上記のような特徴があり、比較的簡単にAPIサーバーを立てることができます。

この記事では、サンプルコードを用いてechoを使用たAPIサーバーを立てる方法を解説します。

いっちー
いっちー

私が所属しているチームの開発でもGo言語とechoを採用しています!

記事内でのサンプルはGitHubにあげておきましたのでご自由にお使いください。

スポンサーリンク

echoとは? – 簡単にAPIを構築できるGo言語のフレームワーク

echoとは、オープンソースで開発されているGo言語のフレームワークです。

APIサーバーを構築するために必要な機能が揃っており、シンプルなので学習コストが低く開発を始めることができます。

いっちー
いっちー

解説はこの辺にして実際に使って試していきましょう!

echoのインストール方法

以下のコマンドでインストールします。1コマンドでインストールは完了です。

$ go get github.com/labstack/echo/v4

echoでGetのAPIを実装する方法

それではGetのAPIを実装していきます。以下がGET APIを実装したサンプル実装です。

main.go

package main

import (
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

func main() {
	// echoインスタンスを生成
	e := echo.New()

	// Middleware
	// httpリクエストの情報をログに表示
	e.Use(middleware.Logger())
	// パニックを回復し、スタックトレースを表示
	e.Use(middleware.Recover())

	// ルーティング
	e.GET("/", getSample)

	// サーバーをスタートさせる
	// ポート番号は引数で指定できる
	e.Logger.Fatal(e.Start(":8080"))
}

// Get API
func getSample(c echo.Context) error {
	return c.String(http.StatusOK, "Get!")
}

起動してみます。echoという文字とともにサーバーが立ち上がりました。

$ go run main.go

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.5.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:8080

curlで確認します。

$ curl 'http://localhost:8080/'

以下がレスポンスとして返却されることが確認できました。

Get!
いっちー
いっちー

APIリクエストがあった際の処理や、返却するレスポンスは自由に設定できます!

echoでPostのAPIを実装する方法

次はPostのAPIを実装します。Postの実装は以下の記述をmain.goに追加します。

// mainメソッドのルーティングに追加
e.POST("/post", postSample)

// mainメソッド外に追加
// Handler
func postSample(c echo.Context) error {
	// Postの処理
	return c.String(http.StatusOK, "Post!")
}

curlで確認します。

$ curl -X POST 'http://localhost:8080/post'

以下がレスポンスとして返却されたら成功です。

Post!

リクエストのURLパラメーターを受け取る方法

URLパラメーターを受け取る場合は Param を使用します。

// mainメソッドのルーティングに追加
e.POST("/post/:id", postSample)

// mainメソッド外に追加
// Handler
func postSample(c echo.Context) error {
        // URLパラメーター受け取り
	id, _ := strconv.Atoi(c.Param("id"))
	msg := fmt.Sprintf("url param %v", id)
	return c.String(http.StatusOK, msg)
}

curlで確認します。レスポンスにURLパラメーターで渡したIDが確認できます。

$ curl -X POST 'http://localhost:8080/post/1'
url param 1

リクエストのクエリパラメーターを受け取る方法

エリパラメーターを受け取る場合は QueryParam を使用します。

hoge := c.QueryParam("hoge")

リクエストボディを受け取る方法

リクエストボディを受け取る方法は、ボディとして渡されるjsonに合わせて構造体を用意して Bind を使用します。

// 受け取るための構造体
type post struct {
	ID        int      `json:"id"`
	Name string `json:"name"`
}

// mainメソッドのルーティングに追加
e.POST("/post/:id", postSample)

// Handler
func postSample(c echo.Context) error {
	p := new(post)
	if err := c.Bind(p); err != nil {
		log.Printf("err %v", err.Error())
		return c.String(http.StatusInternalServerError, "Error!")
	}

	// URLパラメーターはBindで入らない
	id, err := strconv.Atoi(c.Param("id"))
	if err != nil {
		log.Printf("err %v", err.Error())
		return c.String(http.StatusInternalServerError, "Error!")
	}
	p.ID = id
	msg := fmt.Sprintf("id: %v, name %v", p.ID, p.Name)
	return c.String(http.StatusOK, msg)
}

curlで確認します。レスポンスに送信したパラメーターが出力されていますね。

$ curl -X POST -H 'Content-Type: application/json' -d '{"name":"taro"}' localhost:8080/post/1
id: 1, name taro

Put, DeleteのAPIを実装する方法

Put, Deleteに関しても以下のようにルーティングを定義することで実装可能です。

e.PUT(<Path>, <メソッド名>)
e.DELETE(<Path>, <メソッド名>)

レスポンスの返却方法

レスポンスは、return部分にステータスコードと返却する内容を指定します。

単純な文字列を返却する場合は String を使用します。

return c.String(http.StatusOK, "Get!")

JSONを返却したい場合は JSON を使用します。返却するJSONの内容は構造体に詰めます。

// 構造体
type post struct {
	ID        int      `json:"id"`
	Name string `json:"name"`
}


// ルーティング(main内)
e.GET("/sample", getResponseSample)

// Handler
func getResponseSample(c echo.Context) error {
	p := &post{
		ID:   1,
		Name: "taro",
	}
	return c.JSON(http.StatusOK, p)
}
いっちー
いっちー

今回の記事はここまでです。

Go言語の入門にはスターティングGo言語Udemyがおすすめです!

>> 動画で学べる!UdemyのGo言語のおすすめ講座はこちら <<

コメント

タイトルとURLをコピーしました