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

/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
}

/main.go

package main

import (
	"net/http"

	"github.com/GloryKim/goWeb/web5/myapp"//본인폴더의 내용이다.
)

func main() {
	http.ListenAndServe(":3000", myapp.NewHandler()) ///myapp/app.go 경로에있는 NewHandler를 가져오는 작업
}

RESTful API 란?

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/12483454-c3c0-450c-b9ee-487c1db8bdc8/Untitled.png

Gorilla/mux 설치

go get -u github.com/gorilla/mux

gorilla/mux