이 튜토리얼에서는 Go, Gin 프레임워크, 오픈 소스 라이브러리 ginvalidator
및 validatorgo
를 사용하여 기본 RESTful API를 생성하는 과정을 안내합니다. 이러한 라이브러리는 입력 검증을 단순화하여 API를 더욱 강력하게 만듭니다.
제품 재고 관리를 위한 API를 구축하겠습니다. API는 제품 생성, 읽기, 업데이트 및 삭제를 지원합니다. 단순화를 위해 데이터는 메모리(영구 데이터베이스가 아님)에 저장됩니다. 이는 서버가 다시 시작되면 데이터가 손실된다는 의미입니다. Postman 또는 Insomnia와 같은 도구를 사용하여 API를 테스트할 수 있습니다.
API 엔드포인트 설계:
API에는 다음과 같은 엔드포인트가 있습니다.
/products
:GET
: 모든 제품의 JSON 목록을 검색합니다.POST
: 새 제품을 추가합니다(JSON 페이로드 필요)./products/:id
:GET
: ID로 단일 제품을 검색합니다(JSON 응답).PUT
: ID별로 제품을 업데이트합니다(JSON 페이로드 필요).DELETE
: ID별로 상품을 삭제합니다.코드 구현:
종속성: 필요한 패키지를 설치합니다: gin-gonic/gin
, bube054/ginvalidator
및 bube054/validatorgo
.
데이터 구조: 제품 데이터를 나타내는 구조체 정의:
<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
함수에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!