Go ialah bahasa yang bagus untuk pengaturcaraan sistem tetapi ia juga bersinar di web, terutamanya apabila membina REST API. Panduan ini berjalan melalui penciptaan API REST mudah menggunakan perpustakaan standard Go. Kami akan membina API untuk mengurus senarai pelayan, membenarkan kami menambah, mengalih keluar dan melihat rekod pelayan. Kami juga akan menggunakan penambahbaikan penghala baharu Go 1.22 untuk pemadanan kaedah yang membolehkan kami mempunyai laluan dan pengendali yang lebih bersih.
Panduan ini menganggap anda mempunyai pemahaman asas tentang Go dan ia dipasang pada mesin anda.
Buat direktori baharu untuk projek anda dan mulakan modul Go:
mkdir server-api cd server-api go mod init server-api
Buat fail bernama main.go. Kami akan menggunakan pakej http standard Go - ia mempunyai semua yang kami perlukan untuk API asas.
package main import ( "encoding/json" "fmt" "log" "net/http" )
Pertama, mari kita tentukan rupa pelayan. Kami akan memastikannya mudah - hanya ID, nama, alamat IP dan wilayah:
type Server struct { ID string `json:"id"` Name string `json:"name"` IP string `json:"ip"` Region string `json:"region` }
Kami akan menyimpan pelayan kami dalam ingatan menggunakan kepingan. Dalam aplikasi sebenar, anda mungkin akan menggunakan pangkalan data:
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"}, }
Seterusnya, kami akan menyediakan laluan kami. Go 1.22 memperkenalkan sintaks penghalaan baharu yang menjadikannya cukup mudah:
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)) }
Sekarang mari kita laksanakan setiap pengendali. Pertama, menyenaraikan semua pelayan:
func listServers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(servers) }
Mendapatkan pelayan tunggal melalui 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) }
Mencipta pelayan baharu:
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) }
Dan akhirnya, memadamkan pelayan:
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) }
Setelah anda meletakkan kod itu, jalankannya:
go run main.go
Berikut ialah cara untuk berinteraksi dengan setiap titik akhir menggunakan cURL:
Senaraikan semua pelayan:
curl localhost:8080/servers
Dapatkan pelayan khusus:
curl localhost:8080/servers/srv1
Tambah pelayan:
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"}';
Padam pelayan:
curl -X DELETE localhost:8080/servers/srv1
Ini ialah API asas, tetapi banyak lagi yang boleh anda tambahkan:
Pustaka standard sangat berkemampuan untuk membina API. Walaupun terdapat lebih banyak rangka kerja berciri penuh tersedia, bermula dengan pustaka standard membantu anda memahami asas tanpa sebarang keajaiban berlaku di sebalik tabir.
Atas ialah kandungan terperinci Membina API REST yang mudah dengan Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!