Go 是一種很棒的系統程式語言,但它在 Web 上也很出色,尤其是在建立 REST API 時。本指南逐步介紹如何使用 Go 的標準庫建立簡單的 REST API。我們將建立一個 API 來管理伺服器列表,以便我們可以新增、刪除和查看伺服器記錄。我們還將使用 Go 1.22 新的路由器增強功能進行方法匹配,這使我們能夠擁有更清晰的路由和處理程序。
本指南假設您對 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中文網其他相關文章!