プログラミング
記事内に商品プロモーションを含む場合があります

Go言語(echo)で手軽にWeb APIサーバーを作る方法

tadanori

この記事では、Go言語のWebフレームワーク”echo”を使って、Webサーバーを作成する方法を解説します。

Goのウェブフレームワーク

Go言語には標準ライブラリとしてnet/httpが用意されていて、これを使うことでRESTアプリを作ることが可能です。

Go言語のフレームワークの多くはnet/httpのラッパーです。フレームワークを利用すると何が良いかというと、ミドルウェアにより、ログの記録、認証、圧縮、キャッシュなどの機能を簡単に追加できたり、ルーティングなどが簡単に行えたりすることができることです。

私は、簡単なものであればnet/httpで、それ以外はginでプログラムを作成していましたが、echoの人気も高いようなので、この記事ではechoを使って簡単なAPIサーバーを作成してみます。

echoのホームページ : https://echo.labstack.com/

echo使ってサクッとAPIサーバーを作ってみる

まず、echoを使ってAPIサーバーをサクッと作ってみます。

フォルダ設定とインストール

ここでは、echo-testというフォルダを作り、その中で作業をすることにします。echo-testに移動して、以下のコマンドを実行します。

$ go mod init echo-test 
$ go get github.com/labstack/echo/v4
$ go get github.com/labstack/echo/v4/middleware 

APIサーバーのプログラム

echo-testフォルダ内に、以下の2つのファイルを作成します。

server.go

package main

import (
	"net/http"

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

func hello(c echo.Context) error {
	return c.File("index.html")
}

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

	// middleware
	e.Use(middleware.RequestID())
	e.Use(middleware.Logger())

	// routes
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.GET("/hello", hello)

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

処理の基本的な流れは以下のようになります。

  1. echoインスタンスの作成
    echo.New()でインスタンスを作成します。
  2. ミドルウェアの定義
    利用するミドルウェアをUseで追加します。ここでは、リクエストにIDをつけるRequestIDと、ログを出力するためのLoggerを登録しています。
  3. ルートの定義
    ルートを定義します。ここでは、/にアクセスした時と、/helloにアクセスした時の関数を定義しています
  4. サーバーの起動
    サーバーを起動して、リクエストを待ちます

なお、/にアクセスした時は、Hello, World!という文字列を返します。また、/helloにアクセスされた場合は、index.htmlを返します。

このように、APIを追加したい場合は、e.GET(...)を追加します。

index.html

HTMLファイルのサンプルです。

<!DOCTYPE html>
<html>

<head>
    <title>Test</title>
</head>

<body>
    <h1>Hello, World!</h1>
    <h2>This is a test.</h2>
</body>

</html>

サーバーの起動

以下のコマンドでサーバーを起動します。

go run server.go

起動すると以下の画面が表示されます。

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

ここで、Webブラウザからhttp://localhost:1323/http://localhost:1323/helloにアクセスすると返答が返ります。

これだけで、Web APIサーバーが完成です。

パラメータを受け取る

パラメータを受け取る方法です。パラメータの受け取り方法には、パスパラメータクエリパラメータがあります。以下、それぞれについて解説します。

パスパラメータの受け取り

パスパラメータはURLのパスの一部をパラメータとするものです。例えば、

http://xxxxx.com/users/123

123の部分がユーザIDのパスパラメータになります。

echoでは、パスパラメータの受け取りは以下のようになります。

e.Get('/path/:text', path)のように、:をつけたパスをルートとして登録しておきます。関数(path())側では、c.Param("text")のような形でパラメータを受け取ることができます。

例の場合は、http://localhost:1323/path/TESTにアクセルするとTESTをパラメータとして受け取ります。

//	e.GET("/path/:text", path)
//  http://localhost:1323/path/TEST

func path(c echo.Context) error {
	name := c.Param("text")
	return c.String(http.StatusOK, name)
}

クエリパラメータの受け取り

クエリパラメータは、URLの末尾に?を付けてキーと値のペアとして受け取るものです。

e.Get("query", query)のように、ルート登録は普通に行います。

パラメータの受け取りは、c.QueryParam("name")のように行います。

例では、http://localhost:1323/query?name=TARO&age=20とアクセスすると、nameTAROを、age20を受け取ることができます。

// e.GET("/query", query)
// http://localhost:1323/query?name=TARO&age=20

func query(c echo.Context) error {
	name := c.QueryParam("name")
	age := c.QueryParam("age")
	return c.String(http.StatusOK, name+":"+age)
}

まとめ

以上、echoの基本的な使い方について解説しました。実際にWebアプリを作るとCORSなどでトラブルことがあるかと思いますが、echoではミドルウェアを使うことで簡単に対応することが可能です。

まずは、いろいろ試して見て使い方を覚えるのが良いかと思います。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました