0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでHTTPサーバーを構築して複数のAPIエンドポイントを作成する方法

Posted at

この記事では、Goの標準ライブラリ net/http を使って、簡単なHTTPサーバーを立ち上げ、複数のAPIエンドポイントを作成する手順を解説します。これにより、ブラウザやHTTPクライアントからリクエストを受け取り、JSONデータやレスポンスを返すAPIサーバーを構築できます。

必要な準備

  1. Goがインストールされていること(バージョン1.16以上推奨)
    • インストールされていない場合は、公式サイトからインストールします:Go公式サイト
  2. ターミナル(またはコマンドプロンプト)

サーバーコードの実装

以下のコードを使って、複数の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)
	}
}

コードの解説

  1. helloHandler 関数:

    • /api/hello エンドポイントにアクセスすると、シンプルなテキストメッセージ "Hello, API!!" を返します。
  2. userHandler 関数:

    • /api/user エンドポイントにアクセスすると、User 構造体のJSONデータを返します。このデータには、ユーザーのID、名前、年齢が含まれています。
  3. dataHandler 関数:

    • /api/data エンドポイントでは、POST メソッドで送信されたJSONデータを受け取り、そのデータをそのままJSONで返します。
  4. http.ListenAndServe:

    • サーバーはポート 8080 で起動します。エラーが発生した場合、コンソールにエラーメッセージが表示されます。

実行手順

  1. Goのプロジェクトディレクトリを作成し、その中に上記のコードを main.go というファイル名で保存します。

  2. ターミナルを開き、プロジェクトディレクトリに移動します。

  3. 以下のコマンドを実行してサーバーを起動します。

    go run main.go
    
  4. サーバーが起動すると、ターミナルに以下のメッセージが表示されます。

    Starting server at :8080
    
  5. ブラウザや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で実装するための基礎を理解できたと思います。今後は、より複雑な機能を追加して、実際のプロジェクトにも適用してみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?