gin_restful

package module
v0.0.0-...-1b21b31 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 28, 2019 License: MIT Imports: 11 Imported by: 1

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")
}

Documentation

Overview

gin_restful 은 gin 을 이용한 restful api 를 간편하게 만들기 위한 extension 입니다. go 언어로 restful api 를 더 편하게 만들고 싶어 개발하였습니다.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NotBlankValidate

func NotBlankValidate(fl validator.FieldLevel) bool

구조체 필드에 `binding:"notblank"` 과 같이 사용합니다.

Types

type Api

type Api struct {
	App       *gin.RouterGroup
	Prefix    string
	Resources map[string]interface{}
}

Api 구조체는 Resource 인스턴스들을 관리하고 gin 서버에 등록하기 위한 구조체입니다. NewApi 함수로 인스턴스를 생성하여 사용합니다. AddResource 함수로 Api 인스턴스에 Resource 를 등록할 수 있습니다.

func NewApi

func NewApi(app *gin.Engine, prefix string) *Api

Api 구조체의 인스턴스를 인스턴스를 생성하여 포인터로 반환하는 함수입니다. 첫번째 인자 app(type: *gin.Engine)은 Resource 를 등록 할 gin 서버의 인스턴스입니다. 두번째 인자 prefix(type string)은 api url 의 제일 앞 부분에 붙습니다.

func (*Api) AddResource

func (a *Api) AddResource(resource interface{}, url string)

Api 인스턴스에 새로운 Resource 를 등록하는 메서드입니다. Api 의 필드 App 이 nil 이 아니라면 gin 서버에 즉시 등록하고 nil 이라면 Api 구조체에 잠시 저장합니다. 서버에 등록할 때는 Resource 의 메서드 중 http method 인 것을 찾아 인자를 파싱하여 url 을 생성합니다. 요청을 받았을때 메서드가 실행되며 각각의 인자는 자동으로 채워집니다. string, int, float, bool 타입의 인자는 url 에서 파싱하여 전달합니다. *gin.Context 타입의 인자는 해당 요청의 context 로 채워집니다. 구조체 타입의 인자는 하나만 존재할 수 있으며 요청의 body 를 파싱하여 채워집니다.

func (*Api) GetHandlersChain

func (a *Api) GetHandlersChain() gin.HandlersChain

Api 인스턴스에 등록된 Resource 의 Handler 들을 gin.HandlerChain 타입으로 반환하는 메서드입니다.

func (*Api) InitApp

func (a *Api) InitApp(e *gin.Engine)

새로운 gin 서버를 Api 에 등록하고 Api 에 저장되어있던 Resource 들을 gin 서버에 등록시키는 메서드입니다.

type ApplicationError

type ApplicationError struct {
	Message string
	Status  int
}

func (ApplicationError) Error

func (e ApplicationError) Error() string

type Resource

type Resource struct {
	Middlewares map[string][]gin.HandlerFunc
}

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 를 파싱하여 채워집니다.

func InitResource

func InitResource() *Resource

Resource 구조체를 초기화하여 포인터로 반환해주는 함수입니다. 새로운 Resource 구조체를 정의하여 사용할 때 Resource 를 임베딩 하기 위해 사용합니다.

func (*Resource) AddMiddleware

func (r *Resource) AddMiddleware(middleware gin.HandlerFunc, methods ...string)

Resource 인스턴스에 각 http method 에 사용할 Middleware 를 등록하는 메서드입니다. methods 는 사용가능한 http method 의 이름과 같아야 합니다.

Directories

Path Synopsis
example module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL