Golang REST/GraphQL REST Layer 라이브러리 알아보기
오늘은 Golang으로 REST/GraphQL 빌드 프레임워크 REST Layer 라이브러리를 알아보려 합니다.
REST Layer 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
맥에서 Golang의 버전을 올리려면 brew를 이용합니다.
brew upgrade go
우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go
go get으로 REST Layer 패키지를 설치합니다.
go get github.com/rs/rest-layer
홈의 go 폴더에 REST Layer 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"log"
"net/http"
"github.com/rs/rest-layer/resource"
"github.com/rs/rest-layer/resource/testing/mem"
"github.com/rs/rest-layer/rest"
"github.com/rs/rest-layer/schema"
)
log, net 그리고 rest-layer 패키지를 가져옵니다.
var (
test = schema.Schema{
Description: `test object`,
Fields: schema.Fields{
"id": {
Required: true,
ReadOnly: true,
Filterable: true,
Sortable: true,
OnInit: schema.NewID,
Validator: &schema.String{
Regexp: "^[0-9a-z]$",
},
},
test 리소스의 스키마를 만들고, id 필드를 정의합니다.
필수 여부, read-only로 지정하고, 정렬하거나 필터링할 수도 있게 할 수 있습니다.
그리고 필드에 맞는 hook과 Validator를 준비할 수 있습니다.
"created": {
Required: true,
ReadOnly: true,
Filterable: true,
Sortable: true,
OnInit: schema.Now,
Validator: &schema.Time{},
},
},
}
)
created 필드도 정의합니다.
이 필드는 Validator를 다르게 설정합니다.
func main() {
index := resource.NewIndex()
REST API 리소스 인덱스를 생성합니다.
index.Bind("tests", test, mem.NewHandler(), resource.Conf{AllowedModes: resource.ReadWrite})
tests 라는 엔드포인트를 가진 리소스를 바인딩합니다.
api, _ := rest.NewHandler(index)
API HTTP 핸들러를 생성합니다.
http.Handle("/api/", http.StripPrefix("/api/", api))
/api 경로를 추가합니다.
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
8080 포트로 서버를 구동합니다.
Written on December 4, 2019