RESTful API #

一、项目结构 #

text
my-api/
├── cmd/
│   └── main.go
├── internal/
│   ├── handlers/
│   ├── models/
│   ├── services/
│   └── repositories/
├── pkg/
│   ├── config/
│   └── middleware/
├── go.mod
└── go.sum

二、完整示例 #

2.1 主入口 #

go
package main

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/logger"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()
    
    app.Use(logger.New())
    app.Use(recover.New())
    
    app.Get("/health", func(c *fiber.Ctx) error {
        return c.JSON(fiber.Map{"status": "ok"})
    })
    
    api := app.Group("/api/v1")
    
    users := api.Group("/users")
    users.Get("/", listUsers)
    users.Get("/:id", getUser)
    users.Post("/", createUser)
    users.Put("/:id", updateUser)
    users.Delete("/:id", deleteUser)
    
    app.Listen(":3000")
}

2.2 用户处理 #

go
type User struct {
    ID    string `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

var users = []User{}

func listUsers(c *fiber.Ctx) error {
    return c.JSON(users)
}

func getUser(c *fiber.Ctx) error {
    id := c.Params("id")
    for _, user := range users {
        if user.ID == id {
            return c.JSON(user)
        }
    }
    return c.Status(404).JSON(fiber.Map{"error": "Not found"})
}

func createUser(c *fiber.Ctx) error {
    var user User
    if err := c.BodyParser(&user); err != nil {
        return c.Status(400).JSON(fiber.Map{"error": err.Error()})
    }
    users = append(users, user)
    return c.Status(201).JSON(user)
}

func updateUser(c *fiber.Ctx) error {
    id := c.Params("id")
    var user User
    if err := c.BodyParser(&user); err != nil {
        return c.Status(400).JSON(fiber.Map{"error": err.Error()})
    }
    for i, u := range users {
        if u.ID == id {
            users[i] = user
            return c.JSON(user)
        }
    }
    return c.Status(404).JSON(fiber.Map{"error": "Not found"})
}

func deleteUser(c *fiber.Ctx) error {
    id := c.Params("id")
    for i, user := range users {
        if user.ID == id {
            users = append(users[:i], users[i+1:]...)
            return c.SendStatus(204)
        }
    }
    return c.Status(404).JSON(fiber.Map{"error": "Not found"})
}

三、总结 #

3.1 RESTful API设计原则 #

原则 说明
资源命名 使用名词
HTTP方法 GET/POST/PUT/DELETE
状态码 正确使用HTTP状态码
版本化 API版本管理

3.2 下一步 #

现在你已经掌握了RESTful API,接下来让我们学习 用户认证系统,了解完整的认证实现!

最后更新:2026-03-28