Go言語でJSON APIを作る基本!エンコード・デコード例
先生と生徒の会話形式で理解しよう
生徒
「先生、Go言語でJSON形式のデータを扱う方法を教えてください。」
先生
「はい、Goでは標準ライブラリのencoding/jsonを使うと、JSONのエンコードやデコードが簡単にできます。」
生徒
「エンコードとデコードって何ですか?」
先生
「エンコードはGoのデータをJSON形式に変換すること、デコードはJSON形式のデータをGoの構造体に変換することです。」
生徒
「なるほど、それでは具体的な例を見せてもらえますか?」
1. JSON APIの基本構造
JSON APIとは、Web上でデータをやり取りするための仕組みです。Goではhttp.HandleFuncでルートを設定し、json.NewEncoderでデータを返すことで簡単にAPIを作成できます。
package main
import (
"encoding/json"
"net/http"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func userHandler(w http.ResponseWriter, r *http.Request) {
user := User{Name: "太郎", Age: 25}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
}
func main() {
http.HandleFunc("/user", userHandler)
http.ListenAndServe(":8080", nil)
}
このコードでは/userにアクセスすると、JSON形式でユーザー情報が返されます。w.Header().Set("Content-Type", "application/json")は、返すデータの形式をJSONとブラウザに知らせる設定です。
2. JSONのデコード方法
APIでは、クライアントから送られたJSONデータをGoの構造体に変換して扱うことも重要です。これをデコードと呼びます。
func createUserHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
var user User
json.NewDecoder(r.Body).Decode(&user)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user)
} else {
http.Error(w, "POSTメソッドでアクセスしてください", http.StatusMethodNotAllowed)
}
}
func main() {
http.HandleFunc("/create-user", createUserHandler)
http.ListenAndServe(":8080", nil)
}
このコードでは、POSTメソッドで送られたJSONデータをuser構造体に変換し、再度JSONとして返しています。これにより、データの受け取りと送信が簡単に行えます。
3. JSON API作成のポイント
- Goの標準ライブラリ
encoding/jsonを使うことで、簡単にJSONのエンコード・デコードが可能。 - 構造体のフィールドに
`json:"フィールド名"`タグを付けると、JSONのキー名を自由に設定できる。 http.HandleFuncでURLごとに処理を設定できるので、複数のAPIを作るのも簡単。- POSTリクエストの処理では
json.NewDecoder(r.Body)を使い、リクエストボディからJSONを読み取る。 - 返すデータは
w.Header().Set("Content-Type", "application/json")でJSON形式であることを明示。
これらのポイントを押さえれば、Go言語で簡単にJSON APIを作成でき、データのやり取りやWebサービス開発に役立てられます。