Go 使用 github.com/fvbock/endless 与 Gorilla Mux 创建高可用的 RESTful API

在现代 Web 开发中,创建一个高可用的 RESTful API 是一项基本任务。Go 语言以其高性能和简单性,成为构建后端服务的热门选择之一。结合 Gorilla Mux 路由库和 endless 包,我们可以实现一个支持平滑重启和高可用性的 API。

endless 包的优势在于支持平滑重启。当我们需要更新服务时,可以在不影响现有连接的情况下重启服务。

依赖包

go get -u github.com/gorilla/mux
go get -u github.com/fvbock/endless

代码

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "github.com/gorilla/mux"
    "github.com/fvbock/endless"
)

// 定义用户结构体
type User struct {
    ID   string `json:"id"`
    Name string `json:"name"`
}

// 模拟数据存储
var users []User

// 处理获取所有用户的请求
func getUsers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(users)
}

// 处理创建新用户的请求
func createUser(w http.ResponseWriter, r *http.Request) {
    var newUser User
    if err := json.NewDecoder(r.Body).Decode(&newUser); err != nil {
        http.Error(w, "无法解析请求体", http.StatusBadRequest)
        return
    }
    users = append(users, newUser)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(newUser)
}

func main() {
    // 初始化路由
    router := mux.NewRouter()

    // 设置路由
    router.HandleFunc("/users", getUsers).Methods("GET")
    router.HandleFunc("/users", createUser).Methods("POST")

    // 启动 HTTP 服务器
    fmt.Println("服务器正在运行,监听端口 8080...")

    // 使用 endless 包创建服务器,支持平滑重启
    endless.ListenAndServe(":8080", router)
}
  • 用户结构体:定义了一个 User 结构体来表示用户的基本信息,包括 ID 和 Name。

  • 数据存储:使用切片 users 来模拟数据存储。

  • 处理函数

    • getUsers:处理 GET 请求,返回所有用户的 JSON 列表。
    • createUser:处理 POST 请求,接收用户数据并将其添加到切片中。
  • 服务器启动:使用 endless.ListenAndServe 启动服务器,该方法支持在服务器重启时保持当前连接,确保用户体验不受影响。

猜你喜欢

转载自blog.csdn.net/jhgj56/article/details/143109866