제목 | restful DELETE 를 한번에 다중을 처리하는 URL의 구조를 어떻게 만들어야 하나요? | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | 마카오최 | 작성시각 | 2019/02/04 01:07:59 |
|
|||
안녕하세요.
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
|
마카오최
/
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= 원하시는 속 시원한 답은 아니지만, 한번 눈여겨 봐두면 좋습니다. |
RESTful을 잠시 잊고 그냥 새로운 라우트를 정의하시면 됩니다. 다른 답변글에서도 하는 얘기지만 REST는 그냥 API 규약을 만드는 하나의 스타일일 뿐입니다.
HTTP PATCH /board/drop?id=1,2,3,4,5,10