この記事では、Goの標準ライブラリ net/http
を使って、簡単なHTTPサーバーを立ち上げ、複数のAPIエンドポイントを作成する手順を解説します。これにより、ブラウザやHTTPクライアントからリクエストを受け取り、JSONデータやレスポンスを返すAPIサーバーを構築できます。
必要な準備
- Goがインストールされていること(バージョン1.16以上推奨)
- インストールされていない場合は、公式サイトからインストールします:Go公式サイト
- ターミナル(またはコマンドプロンプト)
サーバーコードの実装
以下のコードを使って、複数のAPIエンドポイントを持つサーバーを作成します。
package main
import (
"encoding/json"
"fmt"
"net/http"
)
// User 構造体
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
// "/api/hello" エンドポイント
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, API!!") // テキストメッセージを返す
}
// "/api/user" エンドポイント
func userHandler(w http.ResponseWriter, r *http.Request) {
user := User{
ID: 1,
Name: "John Doe",
Age: 30,
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(user) // JSONでユーザー情報を返す
}
// "/api/data" エンドポイント (POST)
func dataHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
return
}
var data map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&data)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data) // 受け取ったデータをそのままJSONで返す
}
// メイン関数
func main() {
// ハンドラ関数を指定してエンドポイントを作成
http.HandleFunc("/api/hello", helloHandler)
http.HandleFunc("/api/user", userHandler)
http.HandleFunc("/api/data", dataHandler)
// サーバー起動
fmt.Println("Starting server at :8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("Error:", err)
}
}
コードの解説
-
helloHandler
関数:-
/api/hello
エンドポイントにアクセスすると、シンプルなテキストメッセージ "Hello, API!!" を返します。
-
-
userHandler
関数:-
/api/user
エンドポイントにアクセスすると、User
構造体のJSONデータを返します。このデータには、ユーザーのID、名前、年齢が含まれています。
-
-
dataHandler
関数:-
/api/data
エンドポイントでは、POST
メソッドで送信されたJSONデータを受け取り、そのデータをそのままJSONで返します。
-
-
http.ListenAndServe
:- サーバーはポート
8080
で起動します。エラーが発生した場合、コンソールにエラーメッセージが表示されます。
- サーバーはポート
実行手順
-
Goのプロジェクトディレクトリを作成し、その中に上記のコードを
main.go
というファイル名で保存します。 -
ターミナルを開き、プロジェクトディレクトリに移動します。
-
以下のコマンドを実行してサーバーを起動します。
go run main.go
-
サーバーが起動すると、ターミナルに以下のメッセージが表示されます。
Starting server at :8080
-
ブラウザや
curl
を使用してAPIにアクセスできます。
APIの利用例
1. /api/hello
エンドポイント
ブラウザまたはターミナルで次のURLにアクセスします。
curl http://localhost:8080/api/hello
レスポンス:
Hello, API!!
2. /api/user
エンドポイント
ユーザー情報を取得するには、次のURLにアクセスします。
curl http://localhost:8080/api/user
レスポンス (JSON形式):
{
"id": 1,
"name": "John Doe",
"age": 30
}
3. /api/data
エンドポイント
POST
メソッドでデータを送信し、そのデータを返してもらうには、以下のコマンドを実行します。
curl -X POST -H "Content-Type: application/json" -d '{"message": "Hello, World!"}' http://localhost:8080/api/data
レスポンス (JSON形式):
{
"message": "Hello, World!"
}
まとめ
この記事では、Goの net/http
パッケージを使用して、複数のAPIエンドポイントを持つ簡単なHTTPサーバーを実装する方法を紹介しました。Goの標準ライブラリだけで、シンプルで効率的なサーバーを構築できるのは大きな魅力です。
これで、基本的なAPIサーバーをGoで実装するための基礎を理解できたと思います。今後は、より複雑な機能を追加して、実際のプロジェクトにも適用してみてください。