"REST 이데올로기"에 따르면 PUT / POST / DELETE 요청에 대한 응답 본문에는 무엇이 있어야합니까?
리턴 코드는 어떻습니까? 가
HTTP_OK
충분?그러한 규칙이있는 이유는 무엇입니까?
POST / PUT의 차이점을 설명하는 좋은 게시물을 찾았습니다. POST vs PUT 그러나 여전히 내 질문에 대답하지 않습니다.
"REST 이데올로기"에 따르면 PUT / POST / DELETE 요청에 대한 응답 본문에는 무엇이 있어야합니까?
리턴 코드는 어떻습니까? 가 HTTP_OK
충분?
그러한 규칙이있는 이유는 무엇입니까?
POST / PUT의 차이점을 설명하는 좋은 게시물을 찾았습니다. POST vs PUT 그러나 여전히 내 질문에 대답하지 않습니다.
답변:
뒤집기를 용서하지만 HTTP를 통해 REST를 수행하는 경우 RFC7231 은 GET, PUT, POST 및 DELETE에서 예상되는 동작을 정확하게 설명합니다.
업데이트 (Jul 3 '14) :
HTTP 사양은 의도적으로 POST 또는 DELETE에서 반환되는 내용을 정의하지 않습니다. 사양은 정의해야 할 내용 만 정의합니다. 나머지는 선택할 수있는 구현 자에게 맡겨져 있습니다.
전체적으로이 규칙은“웹 페이지를 제공하는 것처럼 생각합니다”.
PUT의 경우 즉시 GET을 수행 한 경우와 동일한 뷰를 반환합니다. 200이 될 것입니다 (물론 렌더링이 성공한다고 가정). POST의 경우 생성 된 리소스로 리디렉션합니다 (생성 작업을 수행한다고 가정하고 그렇지 않은 경우 결과 만 반환). 성공적인 작성을위한 코드는 201이며, 실제로는 300 범위에없는 리디렉션의 유일한 HTTP 코드입니다.
나는 DELETE가 무엇을 반환해야하는지에 대해 결코 행복하지 않았다.
PUT
결과 페이지에서 새로 고침 이후, 다음 페이지의 나쁜 관행처럼 보인다 요청 복귀하는 것은 다시 실행 요청을하게됩니다. 대신 동기 요청을 처리한다고 가정하면 리디렉션을 수행하는 것이 좋습니다.
PUT
요청을 보내서 데이터를 되 돌리지 않게하는 것입니다. 예를 들어, 두 사람이 같은 페이지를 참조하는 경우 한 사람은 업데이트를하고 다른 사람은 업데이트를합니다. 첫 번째 사람이 새로 고침하여 결과를 볼 경우 실제로 두 번째 사람이 만들기 전에 물건을 되돌릴 수 있습니다. 그들의 변화.
리소스 생성은 일반적으로 POST에 매핑되며 새 리소스의 위치를 반환해야합니다. 예를 들어 Rails 스캐 폴드에서 CREATE는 새로 생성 된 리소스에 대해 SHOW로 리디렉션합니다. 동일한 접근 방식이 업데이트 (PUT)에 적합 할 수 있지만 이는 일반적이지 않습니다. 업데이트는 성공을 나타내기만하면됩니다. 삭제는 성공 여부 만 표시하면됩니다. 리디렉션하려는 경우 리소스 목록을 반환하는 것이 가장 적합합니다.
성공은 HTTP_OK로 표시 될 수 있습니다 (예).
위에서 언급 한 유일한 단단하고 빠른 규칙은 CREATE가 새 리소스의 위치를 반환해야한다는 것입니다. 그것은 나에게 쉬운 일인 것 같습니다. 클라이언트가 새 항목에 액세스 할 수 있어야한다는 것이 합리적입니다.
업데이트 및 삭제를 위해 HTTP 상태 코드 에서 Alfonso Tienda 응답이 마음에 드 십니까?
다음은 몇 가지 팁입니다.
지우다
200 (응답에 추가 데이터를 보내려는 경우) 또는 204 (권장).
202 삭제 된 작업이 아직 커밋되지 않았습니다.
삭제할 항목이 없는 경우 204 또는 404를 사용하십시오 (삭제 조작은 ent 등원, 이미 삭제 된 항목 삭제가 성공적으로 완료 되었으므로 204 를 리턴 할 수 있지만 dem 등성이 반드시 동일한 응답을 의미하지는 않습니다)
다른 오류 :
- 400 잘못된 요청 (잘못된 구문 또는 잘못된 쿼리는 이상 하지만 가능합니다).
- 401 무단 인증 실패
- 403 금지 : 승인 실패 또는 유효하지 않은 응용 프로그램 ID.
- 405 허용되지 않음 . 확실한.
- 409 리소스 충돌 은 복잡한 시스템에서 가능합니다.
- 그리고, 501 , 502 오류가 발생하는 경우이다.
놓다
컬렉션의 요소를 업데이트하는 경우
- 위의 DELETE와 동일한 이유로 200/204 .
- 작업이 아직 커밋되지 않은 경우 202
참조 된 요소가 존재하지 않습니다 :
PUT은 201 이 될 수 있습니다 (요소로 인해 요소를 작성한 경우)
404 PUT을 통해 요소를 작성하지 않으려는 경우.
400 잘못된 요청 (DELETE의 경우보다 잘못된 구문 또는 잘못된 쿼리).
401 무단
403 금지 : 인증 실패 또는 유효하지 않은 응용 프로그램 ID.
405 허용되지 않음 . 확실한.
409 자원 충돌 은 DELETE와 같이 복잡한 시스템에서 가능합니다.
422 처리 할 수없는 엔티티 "잘못된 요청"(예 : 잘못된 형식의 XML / JSON)과 유효하지 않은 필드 값을 구별하는 데 도움이됩니다.
그리고, 501 , 502 오류가 발생하는 경우이다.