Go はシステム プログラミングに最適な言語ですが、Web、特に REST API を構築する場合にも威力を発揮します。このガイドでは、Go の標準ライブラリを使用して単純な REST API を作成する手順を説明します。サーバーのリストを管理する API を構築し、サーバー レコードを追加、削除、表示できるようにします。また、メソッドのマッチングに Go 1.22 の新しいルーターの機能強化を使用する予定です。これにより、よりクリーンなルートとハンドラーを使用できるようになります。
このガイドは、Go の基本を理解しており、Go がマシンにインストールされていることを前提としています。
プロジェクト用に新しいディレクトリを作成し、Go モジュールを初期化します。
mkdir server-api cd server-api go mod init server-api
main.go というファイルを作成します。 Go の標準 http パッケージを使用します。これには、基本的な API に必要なものがすべて含まれています。
package main import ( "encoding/json" "fmt" "log" "net/http" )
まず、サーバーがどのようなものかを定義しましょう。 ID、名前、IP アドレス、地域のみを含めてシンプルにしておきます:
type Server struct { ID string `json:"id"` Name string `json:"name"` IP string `json:"ip"` Region string `json:"region` }
スライスを使用してサーバーをメモリに保存します。実際のアプリケーションでは、おそらくデータベースを使用します:
var servers = []Server{ {ID: "srv1", Name: "prod-1", IP: "10.0.1.1", Region: "us-east"}, {ID: "srv2", Name: "prod-2", IP: "10.0.1.2", Region: "eu-west"}, }
次に、ルートを設定します。 Go 1.22 では、これを非常に簡単にする新しいルーティング構文が導入されました。
func main() { mux := http.NewServeMux() mux.HandleFunc("GET /servers", listServers) mux.HandleFunc("GET /servers/{id}", showServer) mux.HandleFunc("POST /servers", createServer) mux.HandleFunc("DELETE /servers/{id}", deleteServer) fmt.Println("Server starting on port 8080...") log.Fatal(http.ListenAndServe(":8080", mux)) }
次に、各ハンドラーを実装しましょう。まず、すべてのサーバーをリストします:
func listServers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(servers) }
ID による単一サーバーの取得:
func showServer(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") id := r.PathValue("id") for _, server := range servers { if server.ID == id { json.NewEncoder(w).Encode(server) return } } http.Error(w, "Server not found", http.StatusNotFound) }
新しいサーバーの作成:
func createServer(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var server Server if err := json.NewDecoder(r.Body).Decode(&server); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } servers = append(servers, server) w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(server) }
そして最後に、サーバーを削除します:
func deleteServer(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") for i, server := range servers { if server.ID == id { servers = append(servers[:i], servers[i+1:]...) w.WriteHeader(http.StatusNoContent) return } } http.Error(w, "Server not found", http.StatusNotFound) }
コードを配置したら、それを実行します。
go run main.go
cURL を使用して各エンドポイントと対話する方法は次のとおりです。
すべてのサーバーをリストします:
curl localhost:8080/servers
特定のサーバーを取得します:
curl localhost:8080/servers/srv1
サーバーを追加します:
curl -X POST localhost:8080/servers -H "Content-Type: application/json"; -d '{"id":"srv3","name":"prod-3","ip":"10.0.1.3","region":"ap-south"}';
サーバーを削除します:
curl -X DELETE localhost:8080/servers/srv1
これは基本的な API ですが、追加できる機能はたくさんあります。
標準ライブラリは驚くほど API を構築する能力があります。より多くのフル機能を備えたフレームワークが利用可能ですが、標準ライブラリから始めると、舞台裏で特別な処理を行わずに基本を理解するのに役立ちます。
以上がGo を使用したシンプルな REST API の構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。