개발 Q&A

제목 restful DELETE 를 한번에 다중을 처리하는 URL의 구조를 어떻게 만들어야 하나요?
카테고리 PHP
글쓴이 마카오최 작성시각 2019/02/04 01:07:59
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 16255   RSS

안녕하세요.

 

restful api 디자인시 여러개의 데이터를 한번에 삭제 하는 url 구조를 어떻게 만들어야 하는것인가요?

보통 한개씩 삭제할때는

method 를 DELETE 를 주고,

예를들어 리소스가 board 라면

/board/1

이렇게 하면 board 리소스의 id가 1번인 row를 삭제 한다인데

한번에 여러 id를 삭제하는 경우..

/board/1,2,3,4,5,10

등과 같이 처리하는게 맞는것인지 어떻게 하는것이 좋은건지 샘플을 좀 찾고 싶은데

한번에 하나씩 삭제 하는 예제만 찾게 되네요..

이런 경우가 분명 많을것 같은데 DELETE 말고도 PUT을 하는 경우도 그렇고..

어떤식으로 해야하나요??

 

즐거운 설명절 되세요 ~ ^^

 

 

 다음글 자주 사용하는 파라미터 어떻게 설계하시나요? (2)
 이전글 DB insert 후, 컨트롤러 거쳐서, view에서 ... (5)

댓글

엽토군 / 2019/02/04 14:00:24 / 추천 0

RESTful을 잠시 잊고 그냥 새로운 라우트를 정의하시면 됩니다. 다른 답변글에서도 하는 얘기지만 REST는 그냥 API 규약을 만드는 하나의 스타일일 뿐입니다.

HTTP PATCH /board/drop?id=1,2,3,4,5,10

마카오최 / 2019/02/07 09:57:08 / 추천 0

엽토군 님 답변 감사합니다.

기존 delete method를 활용해야 해서 결국 

/board/1,2,3,4,5,10 등과 같이 넘기고 delete 를 처리하는 단에서 쉼표 문자가 들어가있을경우 배열로 만들어

한번에 삭제 시키는 방향으로 처리했습니다.

구글을 많이 찾아봤는데 해외에서도 이와 같은것에 대한 표준은 없는것 같군요.

빠른 답변 감사드립니다.

kaido / 2019/02/07 13:21:58 / 추천 0

저는 꼼수를 사용합니다 ㅎㅎ

1,2,3,4,5

정확하게 입력된다는 가정이라면 굳이 배열로 다시 잘라서 넣고 반복문 돌리고 할 필요없습니다.

 

$param = "1,2,3,4,5";

delete from table where id in ($param);

 

쿼리문에서 in 으로 처리하시면 쉽습니다.

체크박스 체크해 가는것도 마찬가지로 배열을 다시 , 단위로 잘라서 in 에 넣어서 처리하면 됩니다.

마카오최 / 2019/02/07 15:00:46 / 추천 0

kaido 님 답변 감사합니다.

내부 동작은 아마 kaido님이 말씀하신것이랑 같은 로직으로 돌아갈것이라고 보여지네요.

제가 작성하던 코드는 라라벨의 resource 컨트롤러 인데요.

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    Business::destroy($id);
}

 

Business::destroy($id) 에서 destroy 해당 메소드가 문자와 배열 입력이 가능하게 되있네요.

문자로 넘기면 단일 값을 삭제하게 되있고, 배열로 넘기면 카이도님 말씀처럼 where id in 으로 처리되지 않을까 합니다.

 

그래서 이 체계를 유지하면서 삭제시키는 어떤 방법이 있을까 하다가 결국 아래와 같이 처리하였습니다. 


public function destroy($id)
{
    if (str_contains($id, ',')) {
      $id = explode(',', $id);
    }

    Business::destroy($id);
}

 

처리단이야 뭐 항상 이런식으로 어떻게든 처리가 되지만..

넘겨주는 단에 대한 표준이 없는가? 관련해서 혹시 다른 방법이 있을까 하여 질문 올려봤습니다...

별거 아니었는데 쓸데없는 고민을 한것 같습니다..^^

답변 감사드립니다.^^

kaido / 2019/02/07 15:44:48 / 추천 0

참고하세요~

https://cikorea.net/bbs/view/file?idx=3575&page=1&view_category=&lists_style=

원하시는 속 시원한 답은 아니지만, 한번 눈여겨 봐두면 좋습니다.