首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板