Go言語学習20日目:GETリクエストを受けて固定のJSONレスポンスを返すAPIを作成してみた。。(総復習編)

Go言語学習20日目

毎日、子育ての合間に30分でおっさんが学習できるレベルで進めて20回目。 今まではコチラ

kunio-ud-all.com

ここまで積み上げてきた知識を総動員して、
GETリクエストを受け、JSONレスポンスを返す「ちゃんと動くAPI」を作ります。

残りの10日は、DynamoDB接続について学んでいこうかと思います。 そこで簡単なAPIはクロージングできるかと。


目標

  • http.HandleFunc でGETリクエストを受け取る
  • encoding/json で固定のJSONレスポンスを作る
  • レスポンスステータスコードを 200 OK で返す
  • (余裕があれば)クエリパラメータを受け取って動的なメッセージに挑戦

Hello, World! をJSONで返すAPI

package main

import (
    "encoding/json"
    "net/http"
    "fmt"
)

type Message struct {
    Message string `json:"message"`
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK) // 明示的にステータスコード200をセット

    response := Message{
        Message: "Hello, World!",
    }

    json.NewEncoder(w).Encode(response)
}

func main() {
    http.HandleFunc("/hello", helloHandler)
    fmt.Println("サーバー起動:http://localhost:8080/hello")
    http.ListenAndServe(":8080", nil)
}

まぁ、昨日と変わらずですが。。。 復習。復習。


実行手順
  1. 上記コードを保存(例:main.go
  2. ターミナルで実行
go run main.go
  1. ブラウザまたはPostman、curlなどでリクエスト!
curl http://localhost:8080/hello

レスポンス
{
  "message": "Hello, World!"
}

HTTPステータスコード:200 OK


少しレベルアップ:クエリパラメータを使ってメッセージを変更!

func helloHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)

    name := r.URL.Query().Get("name")
    if name == "" {
        name = "World"
    }

    response := Message{
        Message: fmt.Sprintf("Hello, %s!", name),
    }

    json.NewEncoder(w).Encode(response)
}

アクセス例
  • http://localhost:8080/hello

Hello, World!

  • http://localhost:8080/hello?name=たろう

Hello, たろう!

✅ ポイント
  • クエリパラメータを r.URL.Query().Get("name") で取得
  • 入力がなかった場合のデフォルト値設定も忘れずに!

今日の学びポイントまとめ

✅ Go言語20日目の到達ポイント
  • GETリクエストを受け取るAPIをハンドリングできるようになった
  • 固定のJSONレスポンスを作れるようになった
  • HTTPステータスコード(200)を意識して返すようになった
  • クエリパラメータによる動的レスポンス生成にもチャレンジできた
  • Goの標準パッケージだけで「ちゃんと動くAPI」が作れるようになった!

以上となります。引き続きよろしくお願いいたします。