RD101 / dotori

Asset management solution
https://sites.google.com/view/lazypic/dotori
BSD 3-Clause "New" or "Revised" License
11 stars 7 forks source link

rm RestAPI 제작 #75

Closed khw7096 closed 4 years ago

baesy0 commented 4 years ago

rm REST API를 만들다가 다음과 같은 문제를 확인했어요.

그래서 찾아봤더니 DELETE 메소드일 땐 서버가 message body?를 무시하도록 되어있어서 그런거 같아요.

rfc7231 - 4.3.5

image

rfc2616 - 4.3

image

두 내용을 조합해보면 "DELETE의 body는 서버에 의해 무시된다".인 거 같아요 이 지점에서 어떻게 해결해야할지 고민중이에요 아는 방법이 있다면 알려주세요!

baesy0 commented 4 years ago

코드

if r.Method == http.MethodPost{
  //blahblah
} else if r.Method == http.MethodDelete {
        var itemtype, id string
        r.ParseForm()
        for key, values := range r.Form {
            switch key {
            case "type":
                if len(values) != 1 {
                    http.Error(w, "type을 설정해 주세요", http.StatusBadRequest)
                    return
                }
                itemtype = values[0]
                fmt.Printf("itemtype: %s\n", itemtype)
            case "id":
                fmt.Println("debug3")
                if len(values) != 1 {
                    http.Error(w, "id를 설정해 주세요", http.StatusBadRequest)
                    return
                }
                id = values[0]
                fmt.Printf("id: %s\n", id)
            }
        }
khw7096 commented 4 years ago

csi는 이것때문에 그냥 restfull + /api/rmitem(POST) 이 섞이긴 했죠.

khw7096 commented 4 years ago

헤더에 url이 들어가 있을 테니.. /api/item/{id} 형태는 될듯하기도 한데.. 이방식은 /uri?key=value 앞으로 사용되는 쿼리방식과 차이가 있어요.

khw7096 commented 4 years ago

https://medium.com/@etiennerouzeaud/how-to-create-a-basic-restful-api-in-go-c8e032ba3181

위 링크에서도 결국 /api/v1/users/1 형태로 삭제를 하고 있어요.

image

khw7096 commented 4 years ago

카카오도 DELETE를 쓸 때 URI끝으로.. uri에 동사가 있긴 하지만.

image

https://developers.kakao.com/docs/restapi/quick-reference

또한 Delete 메소드는 전체 API에서 많지는 않아요.