반응형
◆ Gin 프레임워크 설정
▶ GOPATH 디렉토리로 프로프트를 이동한 후 Gin 프레임워크 설치
go get -u github.com/gin-gonic/gin
▶ src 디렉토리에 rest 디렉토리를 생성하고 handler.js 파일을 생성하고 작성
package rest
import (
"fmt"
"log"
"net/http"
"strconv"
"dblayer"
"models"
"github.com/gin-gonic/gin"
)
type Handlerinterface interface {
GetProducts(c *gin.Context)
GetPromos(c *gin.Context)
AddUser(c *gin.Context)
Signln(c *gin.Context)
SignOut(c *gin.Context)
GetOrders(c *gin.Context)
Charge(c *gin.Context)
}
type Handler struct {
db dblayer.DBLayer
}
func NewHandler() (*Handler, error) {
return new(Handler), nil
}
func (h *Handler) GetMainPage(c *gin.Context) {
log.Println("Main page....")
c.String(http.StatusOK, "Main page for secure API!!")
//fmt.Fprintf(c.Writer, "Main page for secure API!!")
}
func (h *Handler) GetProducts(c *gin.Context) {
if h.db == nil {
return
}
products, err := h.db.GetAllProducts()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
fmt.Printf("Found %d products\n", len(products))
c.JSON(http.StatusOK, products)
}
func (h *Handler) GetPromos(c *gin.Context) {
if h.db == nil {
return
}
promos, err := h.db.GetPromos()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, promos)
}
func (h *Handler) AddUser(c *gin.Context) {
if h.db == nil {
return
}
var customer models.Customer
err := c.ShouldBindJSON(&customer)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
customer, err = h.db.AddUser(customer)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, customer)
}
func (h *Handler) SignOut(c *gin.Context) {
if h.db == nil {
return
}
p := c.Param("id")
id, err := strconv.Atoi(p)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
err = h.db.SignOutUserById(id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
}
func (h *Handler) GetOrders(c *gin.Context) {
if h.db == nil {
return
}
p := c.Param("id")
id, err := strconv.Atoi(p)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
orders, err := h.db.GetCustomerOrdersByID(id)
if err != nil {
fmt.Println(err)
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, orders)
}
func (h *Handler) Charge(c *gin.Context) {
if h.db == nil {
return
}
}
▶ src 디렉토리에 rest 디렉토리에 rest.js 파일을 생성하고 작성
package rest
import (
"github.com/gin-gonic/gin"
)
func RunAPI(address string) error {
//Get gin's default engine
r := gin.Default()
//Define a handler
h, _ := NewHandler()
r.GET("/", h.GetMainPage)
//get products
r.GET("/products", h.GetProducts)
//get promos
r.GET("/promos", h.GetPromos)
usersGroup := r.Group("/users")
{
usersGroup.POST("/charge", h.Charge)
usersGroup.POST("/signin", h.SignIn)
usersGroup.POST("", h.AddUser)
}
return r.Run(address)
}
▶ rest 디렉토리로 프롬프트를 옮기고 go install 명령 수행
▶ src 디렉토리에 main.js 파일을 생성하고 작성
package main
import (
"log"
"rest"
)
func main() {
log.Println("Main log....")
rest.RunAPI(":8000")
}
▶ src 디렉토리로 프롬프트를 옮기고 go build main.go
▶./main 으로 실행
반응형
'IT 초보코딩의 세계 > Go 언어' 카테고리의 다른 글
Go 언어 Back End 제작해보기(보안) 4장 (8) | 2023.05.24 |
---|---|
Go 언어 Back End 제작해보기(미들웨어) 3장 (4) | 2023.05.23 |
Go 언어 Back End 제작해보기(Restful API,Gin Framework, Model & Database Layer) 1장 (8) | 2023.05.18 |
Go 언어 Front End 제작해보기(서비스 등록 페이지, 컴포넌트 등록 ) 6장 (14) | 2023.05.17 |
Go 언어 Front End 제작해보기(주문내역 페이지, 탐색메뉴) 5장 (8) | 2023.05.15 |
댓글