首页 > 后端开发 > Golang > 使用 Gin、ginvalidator 和 validatorgo 开发简单的 RESTful API

使用 Gin、ginvalidator 和 validatorgo 开发简单的 RESTful API

Patricia Arquette
发布: 2025-01-14 10:30:47
原创
622 人浏览过

本教程将指导您使用 Go、Gin 框架以及开源库 ginvalidatorvalidatorgo 创建基本的 RESTful API。 这些库简化了输入验证,使您的 API 更加健壮。

Developing a Simple RESTful API with Gin, ginvalidator, and validatorgo

我们将构建一个用于管理产品库存的 API。 该 API 将支持创建、读取、更新和删除产品。 为简单起见,数据将存储在内存中(而不是持久数据库)。 这意味着服务器重新启动时数据会丢失。 您可以使用 Postman 或 Insomnia 等工具来测试 API。

API 端点设计:

API 将具有以下端点:

  • /products:
    • GET:检索所有产品的 JSON 列表。
    • POST:添加新产品(需要 JSON 负载)。
  • /products/:id:
    • GET:通过 ID 检索单个产品(JSON 响应)。
    • PUT:通过 ID 更新产品(需要 JSON 负载)。
    • DELETE:通过 ID 删除产品。

代码实现:

  1. 依赖项: 安装必要的软件包:gin-gonic/ginbube054/ginvalidatorbube054/validatorgo

  2. 数据结构:定义结构来表示产品数据:

<code class="language-go">package main

import (
    "time"
)

type Dimensions struct {
    Length float64 `json:"length"`
    Width  float64 `json:"width"`
    Height float64 `json:"height"`
    Weight float64 `json:"weight"`
}

type Supplier struct {
    Name    string `json:"name"`
    Contact string `json:"contact"`
    Address string `json:"address"`
}

type Product struct {
    ID             string     `json:"id"`
    Name           string     `json:"name"`
    Category       string     `json:"category"`
    Description    string     `json:"description"`
    Price          float64    `json:"price"`
    Stock          int        `json:"stock"`
    Dimensions     Dimensions `json:"dimensions"`
    Supplier       Supplier   `json:"supplier"`
    Tags           []string   `json:"tags"`
    Image          string     `json:"image"`
    ManufacturedAt time.Time  `json:"manufacturedAt"`
    CreatedAt      time.Time  `json:"createdAt"`
    UpdatedAt      time.Time  `json:"updatedAt"`
}</code>
登录后复制
  1. 内存数据:初始化一个切片来保存产品数据:
<code class="language-go">var products = []Product{
    // ... (Initial product data as in the original example) ...
}</code>
登录后复制
  1. 验证中间件: 使用 ginvalidator 创建中间件函数来验证查询参数和请求正文:
<code class="language-go">func productQueriesValidators() gin.HandlersChain {
    return gin.HandlersChain{
        gv.NewQuery("q", nil).Chain().Optional().Trim(" ").Not().Empty(nil).Validate(),
        gv.NewQuery("order", nil).Chain().Optional().Trim(" ").In([]string{"asc", "desc"}).Validate(),
    }
}

func productParamIdValidators() gin.HandlersChain {
    return gin.HandlersChain{gv.NewParam("id", nil).Chain().Trim(" ").Alphanumeric(nil).Validate()}
}

func productBodyValidators() gin.HandlersChain {
    // ... (Validation rules as in the original example) ...
}</code>
登录后复制
  1. API 处理程序: 为每个端点实现 Gin 处理程序,合并验证中间件:
<code class="language-go">func getProducts(c *gin.Context) {
    // ... (Handler logic as in the original example) ...
}

func getProduct(c *gin.Context) {
    // ... (Handler logic as in the original example) ...
}

func deleteProduct(c *gin.Context) {
    // ... (Handler logic as in the original example) ...
}

func postProduct(c *gin.Context) {
    // ... (Handler logic as in the original example) ...
}

func putProducts(c *gin.Context) {
    // ... (Handler logic as in the original example) ...
}</code>
登录后复制
  1. 路由注册:main函数中注册API路由:
<code class="language-go">func main() {
    router := gin.Default()
    router.GET("/products", append(productQueriesValidators(), getProducts)...)
    router.GET("/products/:id", append(productParamIdValidators(), getProduct)...)
    router.DELETE("/products/:id", append(productParamIdValidators(), deleteProduct)...)
    router.POST("/products", append(productBodyValidators(), postProduct)...)
    router.PUT("/products/:id", append(append(productParamIdValidators(), productBodyValidators()...), putProducts)...)
    router.Run(":8080")
}</code>
登录后复制

完整的更新代码(包括步骤 3、4 和 5 中省略的部分)与原始示例的“完整代码”部分相同。 请记住将 // ... 注释替换为原始响应中提供的代码。 此修订后的解释阐明了步骤并使该过程更易于遵循。

以上是使用 Gin、ginvalidator 和 validatorgo 开发简单的 RESTful API的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板