go-gin으로 사쿠와 RESTAPI 구축
gin이란?
gin은 Go 언어의 프레임워크 안에서 주요하고 역사적인 프레임워크로, 가볍고 단순한 인터페이스가 특징입니다.
이번에는 그런 gin을 사용하여 간단한 RESTAPI를 구축하겠습니다.
gin 소개
go get에서.
go get -u github.com/gin-gonic/gin
공식 github 샘플을 이동해 봅시다.
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
go run main.go
http://localhost:8080/ping로 이동하십시오.
message":"pong"가 표시됩니다.
r := gin.Default()
여기 처리에서 기본 미들웨어로 새로운 라우터를 만들고 있습니다.
RESTAPI 구축
그럼 새롭고, RESTAPI를 구축해 갑니다.
샘플로 만드는 것은 타이틀과 디스크립션만 가진 Article을 POST, GET 할 수 있는 기능이 됩니다.
또한 디렉토리 구조는 다음과 같습니다.
src
┣article
┃ ┗article.go
┃
┗httpd
┣handler
┃ ┗articleFunc.go
┗main.go
먼저 Article을 정의합니다.
쓰여진 대로군요.
article.gopackage article
type Item struct {
Title string `json:"title"`
Description string `json:"description"`
}
type Articles struct {
Items []Item
}
func New() *Articles {
return &Articles{}
}
func (r *Articles) Add(item Item) {
r.Items = append(r.Items, item)
}
func (r *Articles) GetAll() []Item {
return r.Items
}
이어서 위 파일에서 정의한 Article의 function을 정리한 파일입니다.
이쪽도 그대로의 처리군요.
articleFunc.go
package handler
import (
"net/http"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func ArticlesGet(articles *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
result := articles.GetAll()
c.JSON(http.StatusOK, result)
}
}
type ArticlePostRequest struct {
Title string `json:"title"`
Description string `json:"description"`
}
func ArticlePost(post *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
requestBody := ArticlePostRequest{}
c.Bind(&requestBody)
item := article.Item{
Title: requestBody.Title,
Description: requestBody.Description,
}
post.Add(item)
c.Status(http.StatusNoContent)
}
}
마지막은 메인이 되는 main.go입니다.
main.gopackage main
import (
"restAPI/httpd/handler"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func main() {
article := article.New()
r := gin.Default()
r.GET("/article", handler.ArticlesGet(article))
r.POST("/article", handler.ArticlePost(article))
r.Run() // listen and serve on 0.0.0.0:8080
}
여기까지 구축을 하면 아래에서 기동해 보세요
go run httpd/main.go
http://localhost:8080/article
에 대한 POST와 GET을 사용할 수 있어야합니다.
시험에 Postman을 사용해 봅니다.
POST (Headers에 Content-Type : application/json 설정)
GET
이상이 됩니다.
참고 자료
htps : // 기주 b. 코 m / 긴 - 고니 c / 긴
h tps : // 긴-고에 c. 코 m / 그럼 / 두 cs /
Reference
이 문제에 관하여(go-gin으로 사쿠와 RESTAPI 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shiei_kawa/items/eddf48287455380f618f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
go get에서.
go get -u github.com/gin-gonic/gin
공식 github 샘플을 이동해 봅시다.
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
go run main.go
http://localhost:8080/ping로 이동하십시오.
message":"pong"가 표시됩니다.
r := gin.Default()
여기 처리에서 기본 미들웨어로 새로운 라우터를 만들고 있습니다.
RESTAPI 구축
그럼 새롭고, RESTAPI를 구축해 갑니다.
샘플로 만드는 것은 타이틀과 디스크립션만 가진 Article을 POST, GET 할 수 있는 기능이 됩니다.
또한 디렉토리 구조는 다음과 같습니다.
src
┣article
┃ ┗article.go
┃
┗httpd
┣handler
┃ ┗articleFunc.go
┗main.go
먼저 Article을 정의합니다.
쓰여진 대로군요.
article.gopackage article
type Item struct {
Title string `json:"title"`
Description string `json:"description"`
}
type Articles struct {
Items []Item
}
func New() *Articles {
return &Articles{}
}
func (r *Articles) Add(item Item) {
r.Items = append(r.Items, item)
}
func (r *Articles) GetAll() []Item {
return r.Items
}
이어서 위 파일에서 정의한 Article의 function을 정리한 파일입니다.
이쪽도 그대로의 처리군요.
articleFunc.go
package handler
import (
"net/http"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func ArticlesGet(articles *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
result := articles.GetAll()
c.JSON(http.StatusOK, result)
}
}
type ArticlePostRequest struct {
Title string `json:"title"`
Description string `json:"description"`
}
func ArticlePost(post *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
requestBody := ArticlePostRequest{}
c.Bind(&requestBody)
item := article.Item{
Title: requestBody.Title,
Description: requestBody.Description,
}
post.Add(item)
c.Status(http.StatusNoContent)
}
}
마지막은 메인이 되는 main.go입니다.
main.gopackage main
import (
"restAPI/httpd/handler"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func main() {
article := article.New()
r := gin.Default()
r.GET("/article", handler.ArticlesGet(article))
r.POST("/article", handler.ArticlePost(article))
r.Run() // listen and serve on 0.0.0.0:8080
}
여기까지 구축을 하면 아래에서 기동해 보세요
go run httpd/main.go
http://localhost:8080/article
에 대한 POST와 GET을 사용할 수 있어야합니다.
시험에 Postman을 사용해 봅니다.
POST (Headers에 Content-Type : application/json 설정)
GET
이상이 됩니다.
참고 자료
htps : // 기주 b. 코 m / 긴 - 고니 c / 긴
h tps : // 긴-고에 c. 코 m / 그럼 / 두 cs /
Reference
이 문제에 관하여(go-gin으로 사쿠와 RESTAPI 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shiei_kawa/items/eddf48287455380f618f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
src
┣article
┃ ┗article.go
┃
┗httpd
┣handler
┃ ┗articleFunc.go
┗main.go
package article
type Item struct {
Title string `json:"title"`
Description string `json:"description"`
}
type Articles struct {
Items []Item
}
func New() *Articles {
return &Articles{}
}
func (r *Articles) Add(item Item) {
r.Items = append(r.Items, item)
}
func (r *Articles) GetAll() []Item {
return r.Items
}
package handler
import (
"net/http"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func ArticlesGet(articles *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
result := articles.GetAll()
c.JSON(http.StatusOK, result)
}
}
type ArticlePostRequest struct {
Title string `json:"title"`
Description string `json:"description"`
}
func ArticlePost(post *article.Articles) gin.HandlerFunc {
return func(c *gin.Context) {
requestBody := ArticlePostRequest{}
c.Bind(&requestBody)
item := article.Item{
Title: requestBody.Title,
Description: requestBody.Description,
}
post.Add(item)
c.Status(http.StatusNoContent)
}
}
package main
import (
"restAPI/httpd/handler"
"restAPI/article"
"github.com/gin-gonic/gin"
)
func main() {
article := article.New()
r := gin.Default()
r.GET("/article", handler.ArticlesGet(article))
r.POST("/article", handler.ArticlePost(article))
r.Run() // listen and serve on 0.0.0.0:8080
}
go run httpd/main.go
htps : // 기주 b. 코 m / 긴 - 고니 c / 긴
h tps : // 긴-고에 c. 코 m / 그럼 / 두 cs /
Reference
이 문제에 관하여(go-gin으로 사쿠와 RESTAPI 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shiei_kawa/items/eddf48287455380f618f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)