歡迎來到我們的全端開發後端工程系列的第 2 部分! ?今天,我們將深入探討最基本的主題之一:使用 Go 建立 RESTful API。無論您是建立內部工具還是公共 API,了解如何建置和實作 RESTful 端點都是關鍵。
在這篇文章中,我們將介紹:
最後,您將牢牢掌握如何在 Go 中設計和實現可擴展的 RESTful API。讓我們開始吧! ?
在深入研究程式碼之前,讓我們先快速回顧一下 API RESTful 的構成要素。 REST(表述性狀態傳輸)是一種用於建立 API 的架構風格,遵循以下原則:
讓我們建立一個基本的 CRUD API 來使用 Go 和 Gorilla Mux 路由器管理使用者。我們的 API 將具有以下端點:
HTTP Method | Endpoint | Action |
---|---|---|
GET | /users | Retrieve all users |
GET | /users/{id} | Retrieve a specific user |
POST | /users | Create a new user |
PUT | /users/{id} | Update an existing user |
DELETE | /users/{id} | Delete a user |
首先,安裝Gorilla Mux路由器進行路由:
go get -u github.com/gorilla/mux
建立一個簡單的 main.go 檔案來開始:
package main import ( "log" "net/http" "github.com/gorilla/mux" ) func main() { r := mux.NewRouter() // Define routes here http.Handle("/", r) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
現在,讓我們定義 API 處理程序。這些將對應於我們的 CRUD 操作。在本範例中,我們將使用一個簡單的記憶體映射來儲存使用者資料。
type User struct { ID string `json:"id"` Name string `json:"name"` Age int `json:"age"` } var users = make(map[string]User)
我們將實作每個 CRUD 操作:建立、讀取、更新和刪除使用者。
func getUsers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var userList []User for _, user := range users { userList = append(userList, user) } json.NewEncoder(w).Encode(userList) }
func getUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) user, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
func createUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var user User _ = json.NewDecoder(r.Body).Decode(&user) users[user.ID] = user w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(user) }
func updateUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) user, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } _ = json.NewDecoder(r.Body).Decode(&user) user.ID = params["id"] // Ensure the ID stays the same users[params["id"]] = user w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
func deleteUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) _, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } delete(users, params["id"]) w.WriteHeader(http.StatusNoContent) }
現在我們已經定義了處理程序,讓我們在主函數中將路由新增至路由器:
func main() { r := mux.NewRouter() r.HandleFunc("/users", getUsers).Methods("GET") r.HandleFunc("/users/{id}", getUser).Methods("GET") r.HandleFunc("/users", createUser).Methods("POST") r.HandleFunc("/users/{id}", updateUser).Methods("PUT") r.HandleFunc("/users/{id}", deleteUser).Methods("DELETE") http.Handle("/", r) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
您可以使用Postman或curl指令來測試您的API。以下是建立新使用者和檢索使用者的方法:
curl -X POST http://localhost:8080/users \ -H "Content-Type: application/json" \ -d '{"id":"1", "name":"John Doe", "age":30}'
curl -X GET http://localhost:8080/users
curl -X GET http://localhost:8080/users/1
curl -X PUT http://localhost:8080/users/1 \ -H "Content-Type: application/json" \ -d '{"name":"John Smith", "age":31}'
curl -X DELETE http://localhost:8080/users/1
現在我們已經建立了基本的 RESTful API,是時候整合資料庫支援以便我們可以持久保存資料。在下一篇文章中,我們將深入研究如何使用 ORM 將 Go API 連接到資料庫。請繼續關注第 3 部分! ?
以上是使用 Go 建立 RESTful API的詳細內容。更多資訊請關注PHP中文網其他相關文章!