Go 언어

본문 바로가기

사이트 내 전체검색


3. RESTful API(2)

페이지 정보

작성자 관리자 댓글 0건 조회 1,559회 작성일 21-07-19 23:09

본문

DELETE 구현해보기

이제 DELETE하는 작업을 해보자

먼저 테스트 코드를 만들고

app_test.go


...

func TestDeleteUser(t *testing.T) {

assert := assert.New(t)


ts := httptest.NewServer(NewHandler())

defer ts.Close()


// Get과 Post와 다르게 기본적으로 delete는 제공해주지 않는다.

req, _ := http.NewRequest("DELETE", ts.URL+"/users/1", nil) // Id는 1로 임의 설정

resp, err := http.DefaultClient.Do(req)

assert.NoError(err)

assert.Equal(http.StatusOK, resp.StatusCode)

data, _ := ioutil.ReadAll(resp.Body)

assert.Contains(string(data), "No User Id:1") // 아무 것도 없는 상태이므로 없다고 출력되야 정상이다.

}

...

다음으로 Delete 핸들러를 만들 것이다.


func deleteUserHandler(w http.ResponseWriter, r *http.Request) {

vars := mux.Vars(r)                 // Gorilla mux에서 제공하는 기능, 알아서 id부분을 추출해줌

id, err := strconv.Atoi(vars["id"]) // int로 변환

if err != nil {                     // 잘못 보냈을 때

w.WriteHeader(http.StatusBadRequest)

fmt.Fprint(w, err)

return

}

// 맵에 없는 Id를 지우려고 할 때

_, ok := userMap[id]

if !ok { // 해당 Id가 없으면

w.WriteHeader(http.StatusOK)

fmt.Fprint(w, "No User Id:", id)

return

}

// 있으면 해당 id를 usermap에서 삭제

delete(userMap, id) 

w.WriteHeader(http.StatusOK)

fmt.Fprint(w, "Deleted User ID:", id)

}

테스트 코드를 실행해보면 아무것도 없는 상태에서 delete를 하므로 없다고 출력되는 것이 확인된다.


따라서 테스트 코드를 수정해서 정보가 있을 때와 없을 때를 비교해보겠다.


app_test.go


...

func TestDeleteUser(t *testing.T) {

...

// 정보를 받아서 다시 delete 수행해보기

resp, err = http.Post(ts.URL+"/users", "application/json",

strings.NewReader(`{"first_name":"jinkwan", "last_name":"lee", "email":"leejinkwangmail.com"}`))

assert.NoError(err)

assert.Equal(http.StatusCreated, resp.StatusCode)


user := new(User)

err = json.NewDecoder(resp.Body).Decode(user)

assert.NoError(err)

assert.NotEqual(0, user.ID)


req, _ = http.NewRequest("DELETE", ts.URL+"/users/1", nil)

resp, err = http.DefaultClient.Do(req)

assert.NoError(err)

assert.Equal(http.StatusOK, resp.StatusCode)

data, _ = ioutil.ReadAll(resp.Body)

assert.Contains(string(data), "Deleted User ID:1") // 정보가 있는 상태이므로 잘 지워졌다고 출력된다.

}

정보가 없는 상태에서는 No User Id:1이 들어오고, 있는 상태에서는 Deleted User ID:1이 들어오므로 전부 PASS되는 것을 볼 수 있다.


댓글목록

등록된 댓글이 없습니다.



개인정보취급방침 서비스이용약관
Copyright © www.leelab.co.kr All rights reserved.
상단으로
TEL. 063-469-4551 FAX. 063-469-4560
전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과
PC 버전으로 보기