CRUD 示例

服务端

server.go

package main

import (
    "net/http"
    "strconv"

    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

type (
    user struct {
        ID   int    `json:"id"`
        Name string `json:"name"`
    }
)

var (
    users = map[int]*user{}
    seq   = 1
)

//----------
// Handlers
//----------

func createUser(c echo.Context) error {
    u := &user{
        ID: seq,
    }
    if err := c.Bind(u); err != nil {
        return err
    }
    users[u.ID] = u
    seq++
    return c.JSON(http.StatusCreated, u)
}

func getUser(c echo.Context) error {
    id, _ := strconv.Atoi(c.Param("id"))
    return c.JSON(http.StatusOK, users[id])
}

func updateUser(c echo.Context) error {
    u := new(user)
    if err := c.Bind(u); err != nil {
        return err
    }
    id, _ := strconv.Atoi(c.Param("id"))
    users[id].Name = u.Name
    return c.JSON(http.StatusOK, users[id])
}

func deleteUser(c echo.Context) error {
    id, _ := strconv.Atoi(c.Param("id"))
    delete(users, id)
    return c.NoContent(http.StatusNoContent)
}

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Routes
    e.POST("/users", createUser)
    e.GET("/users/:id", getUser)
    e.PUT("/users/:id", updateUser)
    e.DELETE("/users/:id", deleteUser)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

客户端

curl

创建 User

curl -X POST \
  -H 'Content-Type: application/json' \
  -d '{"name":"Joe Smith"}' \
  localhost:1323/users

Response

{
  "id": 1,
  "name": "Joe Smith"
}

获取 User

curl localhost:1323/users/1

Response

{
  "id": 1,
  "name": "Joe Smith"
}

更新 User

curl -X PUT \
  -H 'Content-Type: application/json' \
  -d '{"name":"Joe"}' \
  localhost:1323/users/1

Response

{
  "id": 1,
  "name": "Joe"
}

删除 User

curl -X DELETE localhost:1323/users/1

Response

NoContent - 204

文档更新时间: 2020-07-20 16:49   作者:kuteng