///
Search

05_Restful API(1)

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
복사
실행은 주소창에 http://localhost:3000 이다.

RESTful API 란?

Get, Post, Put, Delete를 할때 일정한 규칙대로 정의해서 코드를 작성을 하는 것

Gorilla/mux 설치

명령어
go get -u github.com/gorilla/mux
Go
복사
공식 깃허브 사이트

Goconvey 보충 설명

영상 설명