首頁 >後端開發 >Golang >使用 Go 建立 RESTful API

使用 Go 建立 RESTful API

DDD
DDD原創
2024-10-11 10:24:29433瀏覽

Building RESTful APIs with Go

歡迎來到我們的全端開發後端工程系列的第 2 部分! ?今天,我們將深入探討最基本的主題之一:使用 Go 建立 RESTful API。無論您是建立內部工具還是公共 API,了解如何建置和實作 RESTful 端點都是關鍵。

在這篇文章中,我們將介紹:

  • 是什麼讓 API RESTful(為什麼它很重要)。
  • 如何設計端點並處理HTTP方法。
  • 使用 Go 的 net/http 套件和 Gorilla Mux 建立一個簡單的 CRUD API。
  • 處理JSON 請求和回應

最後,您將牢牢掌握如何在 Go 中設計和實現可擴展的 RESTful API。讓我們開始吧! ?


是什麼讓 API 變得 RESTful? ?

在深入研究程式碼之前,讓我們先快速回顧一下 API RESTful 的構成要素。 REST(表述性狀態傳輸)是一種用於建立 API 的架構風格,遵循以下原則:

  1. 無狀態:來自客戶端的每個請求都必須包含處理它所需的所有資訊。伺服器不儲存會話資訊。
  2. 資源導向:URL 代表資源,例如 /users、/products 或 /orders,HTTP 方法定義操作。
  3. HTTP 方法:RESTful API 使用 HTTP 方法來指定操作:
    • GET:檢索資料。
    • POST:建立新資源。
    • PUT:更新現有資源。
    • 刪除:刪除資源。
  4. HTTP 狀態碼的使用:RESTful API 充分利用了 HTTP 狀態碼(200 表示成功,404 表示找不到等)。

設定您的 Go 項目

讓我們建立一個基本的 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
HTTP 方法 端點 行動 標題> 取得 /使用者 檢索所有使用者 取得 /使用者/{id} 檢索特定使用者 發布 /使用者 建立新使用者 放置 /使用者/{id} 更新現有用戶 刪除 /使用者/{id} 刪除使用者 表>

第 1 步:安裝依賴項

首先,安裝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))
}

第 2 步:定義處理程序

現在,讓我們定義 API 處理程序。這些將對應於我們的 CRUD 操作。在本範例中,我們將使用一個簡單的記憶體映射來儲存使用者資料。

記憶體資料存儲

type User struct {
    ID   string `json:"id"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}

var users = make(map[string]User)

第 3 步:實施 CRUD 處理程序

我們將實作每個 CRUD 操作:建立讀取更新刪除使用者。

GET /users – 檢索所有用戶
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)
}
GET /users/{id} – 檢索特定用戶
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)
}
POST /users – 建立一個新用戶
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)
}
PUT /users/{id} – 更新現有用戶
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)
}
DELETE /users/{id} – 刪除用戶
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))
}

第 5 步:測試 API

您可以使用Postman或curl指令來測試您的API。以下是建立新使用者和檢索使用者的方法:

  1. 建立新使用者
   curl -X POST http://localhost:8080/users \
   -H "Content-Type: application/json" \
   -d '{"id":"1", "name":"John Doe", "age":30}'
  1. 取得所有使用者
   curl -X GET http://localhost:8080/users
  1. 取得特定使用者
   curl -X GET http://localhost:8080/users/1
  1. 更新用戶
   curl -X PUT http://localhost:8080/users/1 \
   -H "Content-Type: application/json" \
   -d '{"name":"John Smith", "age":31}'
  1. 刪除使用者
   curl -X DELETE http://localhost:8080/users/1

建立 RESTful API 的最佳實踐

  1. 使用正確的 HTTP 方法:遵循 RESTful 原則,使用 GET 進行讀取、POST 進行建立、PUT 進行更新、DELETE 進行刪除。
  2. 傳回適當的狀態碼:一律使用正確的 HTTP 狀態碼(例如,201 Created 表示成功建立資源,404 Not Found 表示缺少資源)。
  3. 優雅地處理錯誤:不要向使用者揭露內部錯誤。使用「找不到使用者」或「無效請求」等通用訊息。
  4. 對大型資料集使用分頁:返回大型清單(如 /users)時,實作分頁以防止過多的資料載入。
  5. 保護您的 API:使用 JWT 或 OAuth2 等驗證方法來保護敏感端點。

接下來是什麼?

現在我們已經建立了基本的 RESTful API,是時候整合資料庫支援以便我們可以持久保存資料。在下一篇文章中,我們將深入研究如何使用 ORM 將 Go API 連接到資料庫。請繼續關注第 3 部分! ?

以上是使用 Go 建立 RESTful API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn