毎日、子育ての合間に30分でおっさんが学習できるレベルで進めて20回目。 今まではコチラ
ここまで積み上げてきた知識を総動員して、
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) }
まぁ、昨日と変わらずですが。。。 復習。復習。
実行手順
- 上記コードを保存(例:
main.go
) - ターミナルで実行
go run main.go
- ブラウザまたは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」が作れるようになった!
以上となります。引き続きよろしくお願いいたします。