> 백엔드 개발 > 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/gin, bube054/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:
  2. 를 사용하여 쿼리 매개변수 및 요청 본문을 검증하기 위한 미들웨어 기능을 만듭니다.
<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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿