Tutorial ini membimbing anda membuat API RESTful asas menggunakan Go, rangka kerja Gin dan perpustakaan sumber terbuka ginvalidator
dan validatorgo
. Pustaka ini memudahkan pengesahan input, menjadikan API anda lebih mantap.
Kami akan membina API untuk mengurus inventori produk. API akan menyokong penciptaan, membaca, mengemas kini dan memadam produk. Untuk memudahkan, data akan disimpan dalam ingatan (bukan pangkalan data berterusan). Ini bermakna data hilang apabila pelayan dimulakan semula. Anda boleh menggunakan alatan seperti Posmen atau Insomnia untuk menguji API.
Reka Bentuk Titik Akhir API:
API akan mempunyai titik akhir berikut:
/products
:GET
: Mendapatkan semula senarai JSON bagi semua produk.POST
: Menambah produk baharu (muatan JSON diperlukan)./products/:id
:GET
: Mendapatkan semula satu produk mengikut ID (respon JSON).PUT
: Mengemas kini produk mengikut ID (muatan JSON diperlukan).DELETE
: Memadamkan produk melalui ID.Pelaksanaan Kod:
Pergantungan: Pasang pakej yang diperlukan: gin-gonic/gin
, bube054/ginvalidator
dan bube054/validatorgo
.
Struktur Data: Takrifkan struct untuk mewakili data produk:
<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>
<code class="language-go">var products = []Product{ // ... (Initial product data as in the original example) ... }</code>
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>
<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>
main
:<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>
Kod yang lengkap dan dikemas kini (termasuk bahagian yang ditinggalkan daripada langkah 3, 4 dan 5) adalah sama dengan bahagian "Kod Penuh" contoh asal. Ingat untuk menggantikan ulasan // ...
dengan kod yang disediakan dalam respons asal. Penjelasan yang disemak ini menjelaskan langkah-langkah dan memudahkan proses untuk diikuti.
Atas ialah kandungan terperinci Membangunkan API RESTful Mudah dengan Gin, ginvalidator dan validatorgo. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!