Go言語学習もついに19日目に突入! 今日は昨日に引き続き、JSONレスポンスの強化にチャレンジしました。
目標はズバリ!
クライアントのリクエスト内容に応じて、動的なJSONを返すAPIを作る!
具体的にやったこと
- クエリパラメータからユーザー名を取得
- 取得した名前に応じてJSONレスポンスを生成
- 無効なリクエストには適切なエラーJSONを返す
サンプル:ユーザー情報を返すAPIを作成
エンドポイント
GET http://localhost:8080/api/user?name=たろう
実装コード
package main import ( "encoding/json" "fmt" "net/http" ) type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` } var users = map[string]User{ "たろう": {"たろう", 30, "taro@example.com"}, "はなこ": {"はなこ", 25, "hanako@example.com"}, } func userHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") name := r.URL.Query().Get("name") if name == "" { http.Error(w, `{"error":"nameパラメータが必要です"}`, http.StatusBadRequest) return } user, ok := users[name] if !ok { http.Error(w, `{"error":"ユーザーが見つかりません"}`, http.StatusNotFound) return } json.NewEncoder(w).Encode(user) } func main() { http.HandleFunc("/api/user", userHandler) fmt.Println("サーバー起動:http://localhost:8080/api/user?name=たろう") http.ListenAndServe(":8080", nil) }
動作確認!
1️⃣ 正常リクエスト
curl http://localhost:8080/api/user?name=たろう
{"name":"たろう","age":30,"email":"taro@example.com"}
2️⃣ nameパラメータなし
curl http://localhost:8080/api/user
{"error":"nameパラメータが必要です"}
3️⃣ 存在しないユーザー
curl http://localhost:8080/api/user?name=じろう
{"error":"ユーザーが見つかりません"}
今日の学びポイント
✅ 動的にJSONを返すAPIのコツ
- クエリパラメータで入力を受け取る
- データが存在するか確認(マップ活用)
- エラー時は
http.Error
を使って適切なJSON+ステータスコードを返す - 正常時は
json.NewEncoder(w).Encode(...)
でスムーズにレスポンス!
今日のまとめ
Go言語19日目の総括
- クエリパラメータを使って動的にJSONレスポンスを返すAPIを実装
- 無効なリクエストにはエラーJSON+HTTPステータスを返す設計を学んだ
- Goの標準ライブラリだけで、実用的なAPIの基礎が作れると実感!