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되는 것을 볼 수 있다.
댓글목록
등록된 댓글이 없습니다.