2022.08.11  

【Go】JSONが返ってくるAPIの作成

Go    

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)
}
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信