Go言語学習もいよいよ3週目の最終日=21日目に突入しました!
今日はこの1週間で学んできた「Web API開発」について、
しっかり振り返りながら、ゼロからもう一度書いてみる実践チャレンジに取り組みました。
今まではコチラ
🔁 総復習:GoのWeb API開発フローまとめ
Web APIを作る基本ステップ(これまでに学んだこと)
net/http
を使ってサーバーを立てるhttp.HandleFunc
でルーティングを設定r.URL.Query()
でクエリパラメータを取得encoding/json
で構造体 → JSON変換http.Error
やw.WriteHeader
を使って適切なレスポンスコードを返す
この流れがしっかり頭に入っていれば、GoでAPIを自力で作る準備は万端!かな?
チャレンジ:ゼロからGET APIを実装
今回作ったのは、「ユーザー名を指定してメッセージを返すAPI」。
GET /api/greet?name=たろう
のような形でアクセスすると、JSONでメッセージが返るシンプルなAPIです。
実装コード
package main import ( "encoding/json" "fmt" "net/http" ) type GreetResponse struct { Message string `json:"message"` } func greetHandler(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 } msg := fmt.Sprintf("こんにちは、%sさん!", name) res := GreetResponse{Message: msg} w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(res) } func main() { http.HandleFunc("/api/greet", greetHandler) fmt.Println("サーバー起動:http://localhost:8080/api/greet?name=たろう") http.ListenAndServe(":8080", nil) }
確認手順
go run main.go
ブラウザ or curl でアクセス:
curl http://localhost:8080/api/greet?name=はなこ
結果(正常時)
{ "message": "こんにちは、はなこさん!" }
結果(エラー時)
{"error":"nameパラメータを指定してください"}
何回も同じ風なのを書いて覚えたいです。。
POSTでJSONを受け取るサンプル(名前を登録)
type UserRequest struct { Name string `json:"name"` } func postHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method != http.MethodPost { http.Error(w, `{"error":"POSTメソッドでアクセスしてください"}`, http.StatusMethodNotAllowed) return } var req UserRequest err := json.NewDecoder(r.Body).Decode(&req) if err != nil || req.Name == "" { http.Error(w, `{"error":"nameが必要です"}`, http.StatusBadRequest) return } res := GreetResponse{Message: fmt.Sprintf("%sさんを登録しました!", req.Name)} json.NewEncoder(w).Encode(res) }
http.HandleFunc("/api/register", postHandler)
今日のまとめ
✅ Go言語21日目の総まとめ
- 1週間で学んだAPI開発の流れを整理しなおせた
net/http
+encoding/json
でAPI開発の基本をマスター- ルーティング・クエリ・ステータスコードなど実務に必要な要素を習得
- POSTにも挑戦して、より実践的な感覚がつかめた!
以上となります。引き続きよろしくお願いいたします。