modulepackage
0.0.0-20190528004126-1b21b311e6c2
Repository: https://github.com/hwangseonu/gin-restful.git
Documentation: pkg.go.dev
# README
gin-restful
gin-restful은 gin으로 restful api를 편하게 개발하기 위해 만든 라이브러리입니다.
Api에 Resource를 등록하는 형태로 restful api 를 개발할 수 있습니다.
문서나 주석은 영어를 잘 하지 못해서 한글로 작성했습니다.
개요
gin을 이용한 더 편한 restful api 개발을 위해
Api에 Resource를 등록시키는 형태로 개발할 수 있게 만들었습니다.
Resource는 어떤 구조체도 될 수 있으며 url이 호출되었을 때
http method와 이름이 같은 메서드가 호출 됩니다.
Resource를 등록만 하면 자동으로 Handler Method의 인자를
분석하여 url를 만들어 gin에 등록합니다.
예시
package main
import (
"github.com/gin-gonic/gin"
"github.com/hwangseonu/gin-restful"
"net/http"
)
//restful api 를 구현하기 위한 SampleResource 구조체입니다.
//gin-restful 의 Resource 구조체 포인터를 임베딩합니다.
//각 Handler 마다 다른 Middleware 들을 적용할 수 있습니다.
type SampleResource struct {
*gin_restful.Resource
}
//Json Body 를 테스트하기 위한 구조체입니다.
type Data struct {
Name string `json:"name" validate:"required,notblank"`
}
//SampleResource 의 Url 로 GET 요청이 들어왔을 때 실행되는 Handler 입니다.
//gin.H(json) 와 status code 를 반환합니다.
//path variable 인 name 을 json 에 담아 반환합니다.
func (r SampleResource) Get(name string) (gin.H, int) {
return gin.H{
"name": name,
}, http.StatusOK
}
//SampleResource 의 Url 로 POST 요청이 들어왔을 때 실행되는 Handler 입니다.
//json body 를 Data 구조체로 받습니다.
//gin.H 과 status code 를 반환합니다.
//요청으로 받은 payload 를 그대로 반환합니다.
func (r SampleResource) Post(c *gin.Context, json Data) (Data, int) {
return json, 200
}
//Middleware 테스트용 Sample Middleware 입니다.
//콘솔에 "Hello, World" 를 출력합니다.
func SampleMiddleware(c *gin.Context) {
println("Hello, World")
}
//Api 인스턴스를 "/" 주소로 생성합니다.
//SampleResource 의 인스턴스를 생성하여 Api "/samples" 주소로 등록합니다.
//SampleResource GET handler 에 SampleMiddleware 를 등록합니다.
//gin 서버를 5000 포트에서 실행합니다.
func main() {
r := gin.Default()
v1 := gin_restful.NewApi(r, "/")
res := SampleResource{gin_restful.InitResource()}
res.AddMiddleware(SampleMiddleware, http.MethodGet)
v1.AddResource(res, "/samples")
_ = r.Run(":5000")
}
# Functions
Resource 구조체를 초기화하여 포인터로 반환해주는 함수입니다.새로운 Resource 구조체를 정의하여 사용할 때 Resource 를 임베딩 하기 위해 사용합니다.
Api 구조체의 인스턴스를 인스턴스를 생성하여 포인터로 반환하는 함수입니다.첫번째 인자 app(type: *gin.Engine)은 Resource 를 등록 할 gin 서버의 인스턴스입니다.두번째 인자 prefix(type string)은 api url 의 제일 앞 부분에 붙습니다.
구조체 필드에 `binding:"notblank"` 과 같이 사용합니다.
# Structs
Api 구조체는 Resource 인스턴스들을 관리하고 gin 서버에 등록하기 위한 구조체입니다.NewApi 함수로 인스턴스를 생성하여 사용합니다.AddResource 함수로 Api 인스턴스에 Resource 를 등록할 수 있습니다.
No description provided by the author
Resource 는 기본적으로 Api 인스턴스에 등록 가능한 Resource 의 형태입니다.각 Handler 에 적용될 Middleware 들을 포함합니다.Resource 포인터를 임베딩하여 사용할 수 있지만 Middleware 가 필요없다면 임베딩 하지 않아도 무방합니다.Resource 포인터를 임베딩할 때 InitResource 함수를 사용합니다.Resource 에 Handler 를 등록할 때는 사용할 http 메서드와 같은 메서드를 정의하면 됩니다.Handler 의 이름으로는 Get, Post, Put, Patch, Delete 등을 사용할 수 있습니다.Handler 이름의 첫글자는 무조건 대문자여야합니다.Handler 의 에는 *gin.Context, string, int, float, bool, struct 타입의 인자를 사용할 수 있습니다.Resource 를 서버에 등록할 때는 Resource 의 메서드 중 http method 인 것을 찾아 인자를 파싱하여 url 을 생성합니다.요청을 받았을때 메서드가 실행되며 각각의 인자는 자동으로 채워집니다.*gin.Context 와 struct 를 제외한 인자는 path variable 이 됩니다.*gin.Context 타입의 인자는 해당 요청의 context 로 채워집니다.구조체 타입의 인자는 하나만 존재할 수 있으며 요청의 body 를 파싱하여 채워집니다.