Restful Api의 Get을 활용하는 방법
/myapp/app_test.go
package myapp
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestIndex(t *testing.T) {//실행은 goconvey 작업을 수행을 하고 진행을 해야한다.
assert := assert.New(t)
ts := httptest.NewServer(NewHandler()) //목업 테스트 서버
defer ts.Close()//자원 낭비를 위한 항상 반납 작업을 수행
resp, err := http.Get(ts.URL)
assert.NoError(err)
assert.Equal(http.StatusOK, resp.StatusCode)
data, _ := ioutil.ReadAll(resp.Body)
assert.Equal("Hello World", string(data))
}
func TestUsers(t *testing.T) {
assert := assert.New(t)
ts := httptest.NewServer(NewHandler())
defer ts.Close()
resp, err := http.Get(ts.URL + "/users")
assert.NoError(err)
assert.Equal(http.StatusOK, resp.StatusCode)
data, _ := ioutil.ReadAll(resp.Body)
assert.Contains(string(data), "Get UserInfo")
}
func TestGetUserInfo(t *testing.T) {
assert := assert.New(t)
ts := httptest.NewServer(NewHandler())
defer ts.Close()
resp, err := http.Get(ts.URL + "/users/89")
assert.NoError(err)
assert.Equal(http.StatusOK, resp.StatusCode)
data, _ := ioutil.ReadAll(resp.Body)
assert.Contains(string(data), "User Id:89")
resp, err = http.Get(ts.URL + "/users/56")
assert.NoError(err)
assert.Equal(http.StatusOK, resp.StatusCode)
data, _ = ioutil.ReadAll(resp.Body)
assert.Contains(string(data), "User Id:56")
}
Go
복사
/myapp/app.go
package myapp
//핸들러를 만들어주는 패키지
import (
"fmt"
"net/http"
"github.com/gorilla/mux" // 고릴라 먹스는 밑에 설치방법 정의하였음
)
func indexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
}
func usersHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Get UserInfo by /users/{id}")
}
func getUserInfoHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
fmt.Fprint(w, "User Id:", vars["id"])
}
// NewHandler make a new myapp handler
func NewHandler() http.Handler {
mux := mux.NewRouter()
mux.HandleFunc("/", indexHandler)
mux.HandleFunc("/users", usersHandler)
mux.HandleFunc("/users/{id:[0-9]+}", getUserInfoHandler)//user ID 새로 들어올때 알맞게 파싱해주는 작업이 필요하다.
return mux
}
Go
복사
/main.go
package main
import (
"net/http"
"github.com/GloryKim/goWeb/web5/myapp"//본인폴더의 내용이다.
)
func main() {
http.ListenAndServe(":3000", myapp.NewHandler()) ///myapp/app.go 경로에있는 NewHandler를 가져오는 작업
}
Go
복사
•
RESTful API 란?
•
Get, Post, Put, Delete를 할때 일정한 규칙대로 정의해서 코드를 작성을 하는 것
Gorilla/mux 설치
•
명령어
go get -u github.com/gorilla/mux
Go
복사
•
공식 깃허브 사이트
Goconvey 보충 설명
영상 설명
•