URLにアクセスするとサーバー側で設定したデータがJSONで返ってくるAPI実装のメモです。
下記コードを実行してブラウザからhttp://localhost:8081/view
にアクセスすると次のようなレスポンスが返ってきます。
コード内のSampleResponseの中身を書き換えると、レスポンス内容を変えられます。
コードの解説については、簡単にですがコードのコメントに記載しています。
package main
import (
"encoding/json"
"log"
"net/http"
"strconv"
)
type (
SampleHandler struct {
Data string
}
SampleResponse struct {
Status string `json:"status"`
Message string `json:"message"`
ReturnCode string `json:"returnCode"`
}
)
func main() {
// httpHandlerの準備
mux := &http.ServeMux{}
// httpHandlerの設定。第1引数に設定したURLへ接続すると第2引数のHandler処理が実行されるようになる
mux.Handle("/view", NewSampleHandler())
// httpサーバー起動処理。引数にはポート番号とhttpHandlerを設定する
if err := http.ListenAndServe(":8081", mux); err != nil {
log.Fatal(err)
}
}
// SampleHandlerの構造体にinterfaceのhttp.Handlerを設定して返す関数
// interfaceのhttp.HandlerにはServeHTTP関数が含まれており、後の処理ListenAndServe関数から呼び出される
func NewSampleHandler() http.Handler {
return &SampleHandler{"テスト"}
}
// http.Handlerのinterfaceで定義されているServeHTTP関数を作成する。
// ServeHTTP関数はListenAndServe関数内で呼び出される
func (h *SampleHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// リターンコードの設定
returnCode := 200
// httpResponseの内容を設定
res := &SampleResponse{
Status: "OK",
Message: h.Data,
ReturnCode: strconv.Itoa(returnCode),
}
// レスポンスヘッダーの設定
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
// ステータスコードを設定
w.WriteHeader(returnCode)
// httpResponseの内容を書き込む
buf, _ := json.MarshalIndent(res, "", " ")
_, _ = w.Write(buf)
}