GoによるWebAPIの構築
Go では簡単に WebAPI が作れる。
シンプルな WebAPI
HTTPリクエストを処理できるシンプルなAPIサーバーを main.go として定義
// main.go
package main
import (
"fmt"
"time"
"log"
"net/http"
"encoding/json"
)
// JSONの構造
type Article struct {
Title string `json:"Title"`
Description string `json:"Description"`
Date time.Time `json:"Date"`
}
type Articles []Article
// トップのリクエストを処理する関数を定義
func top(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to my WebSite!")
fmt.Println("Endpoint Hit: top")
}
// JSONサンプルのリクエストを処理する関数を定義
func articles(w http.ResponseWriter, r *http.Request) {
// JSON レスポンス用のヘッダー情報を記述
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
articles := Articles{}
for i := 1; i <= 3; i++ {
title := "タイトル %d"
desc := "説明 %d"
current := time.Date(2020, 3, i+10, 8, 30, 0, 0, time.Local)
articles = append(
articles,
Article {
Title: fmt.Sprintf(title, i),
Description: fmt.Sprintf(desc, i),
Date: current })
}
fmt.Println("Endpoint Hit: articles")
json.NewEncoder(w).Encode(articles)
}
// URLのパスと関数を結びつける(ルーティング)
func handleRequests() {
server := http.Server{
Addr: ":8081",
}
// トップ・ページ
http.HandleFunc("/", top)
// JSONサンプル・ページ
http.HandleFunc("/articles", articles)
log.Fatal(server.ListenAndServe())
}
func main() {
handleRequests()
}
実行
$ go run main.go
REST Clientで動作確認
REST Client を利用して、定義した内容が動作しているのを確認してみます。
最後に
単純なものであれば標準ライブラリーで WebAPIを構築可能です。 しかし、実際には DBへのアクセスやリクエストの処理などを記述していくことが多いので、Go用のWebフレームワークを利用し、もっと効率よく開発すると良いでしょう。