UPDATE
( PUT
) 및 DELETE
(예: 제품이 성공적으로 업데이트됨)에 대해 어떤 상태 코드를 설정해야 합니까?
질문자 :xpepermint
PUT 요청의 경우: HTTP 200 또는 HTTP 204 는 "리소스가 성공적으로 업데이트됨"을 의미해야 합니다.
DELETE 요청의 경우: HTTP 200 또는 HTTP 204 는 "리소스가 성공적으로 삭제됨"을 의미해야 합니다. HTTP 202 도 반환될 수 있으며 이는 서버에서 명령을 수락했으며 "리소스가 삭제 표시되었습니다"라는 의미입니다.
기존 리소스가 수정되면 200(OK) 또는 204(No Content) 응답 코드를 전송하여 요청이 성공적으로 완료되었음을 나타내야 합니다(SHOULD).
성공적인 응답은 응답에 상태를 설명하는 엔터티가 포함된 경우 200(OK), 작업이 아직 제정되지 않은 경우 202(Accepted), 작업이 제정되었지만 응답에 포함되지 않은 경우 204(내용 없음)여야 합니다(SHOULD). 엔터티.
HTTP 200 OK: 성공적인 HTTP 요청에 대한 표준 응답입니다. 실제 응답은 사용된 요청 방법에 따라 다릅니다.
HTTP 204 콘텐츠 없음: 서버가 요청을 성공적으로 처리했지만 콘텐츠를 반환하지 않습니다.
Daniel Vassallo
짧은 대답: PUT 및 DELETE 모두에 대해 200(OK) 또는 204(No Content)를 보내야 합니다.
긴 답변: 여기에 완전한 결정 다이어그램이 있습니다(확대하려면 클릭).
ЯegDwight
다음은 몇 가지 팁입니다.
삭제
200 (응답에 추가 데이터를 보내려는 경우) 또는 204 (권장).
202 삭제된 작업이 아직 커밋되지 않았습니다.
삭제할 것이 없으면 204 또는 404를 사용합니다 (DELETE 작업은 멱등원이고 이미 삭제된 항목 삭제는 작업 성공 이므로 204 를 반환할 수 있지만 멱등성이 반드시 동일한 응답을 의미하지는 않습니다)
기타 오류:
- 400 잘못된 요청 (잘못된 구문 또는 잘못된 쿼리는 이상 하지만 가능합니다).
- 401 인증되지 않은 인증 실패
- 403 Forbidden : 권한 부여 실패 또는 잘못된 애플리케이션 ID입니다.
- 405 허용되지 않음 . 확신하는.
- 409 리소스 충돌 은 복잡한 시스템에서 발생할 수 있습니다.
- 그리고 501 , 502 오류의 경우.
놓다
컬렉션의 요소를 업데이트하는 경우
- 위의 DELETE와 같은 이유로 200/204입니다.
- 202 작업이 아직 커밋되지 않은 경우.
참조된 요소가 존재하지 않습니다:
PUT은 201일 수 있습니다(귀하의 행동이기 때문에 요소를 만든 경우).
404 PUT을 통해 요소를 생성하고 싶지 않다면.
400 잘못된 요청 (DELETE의 경우보다 일반적인 잘못된 구문 또는 잘못된 쿼리).
401 권한 없음
403 Forbidden : 인증 실패 또는 잘못된 애플리케이션 ID.
405 허용되지 않음 . 확신하는.
409 리소스 충돌 은 DELETE와 같이 복잡한 시스템에서 발생할 수 있습니다.
422 Unprocessable entity "잘못된 요청"(예: 잘못된 XML/JSON)과 잘못된 필드 값을 구별하는 데 도움이 됩니다.
그리고 501 , 502 오류의 경우.
Alfonso Tienda
RFC 2616은 사용할 상태 코드를 설명합니다.
그리고 아니요, 항상 200 은 아닙니다.
Ignacio Vazquez-Abrams
200 및 204 외에도 205(Reset Content) 가 유효한 응답이 될 수 있습니다.
서버는 요청을 이행했고 사용자 에이전트는 요청을 보낸 문서 보기를 재설정해야 합니다... [예] 입력이 제공된 양식 지우기.
pje
다음은 지식에 대해 알아야 할 몇 가지 상태 코드입니다.
1XX 정보 응답
- 100 계속
- 101 스위칭 프로토콜
- 102 처리
- 103 조기 힌트
2XX 성공
- 200 OK
- 201 생성됨
- 202 수락됨
- 203 권한이 없는 정보
- 204 콘텐츠 없음
- 205 콘텐츠 재설정
- 206 부분 콘텐츠
- 207 다중 상태
- 208 이미 보고됨
- 226 메신저 사용
3XX 리디렉션
- 300 객관식
- 301 영구 이사
- 302 발견
- 303 기타보기
- 304 수정되지 않음
- 305 프록시 사용
- 306 스위치 프록시
- 307 임시 리디렉션
- 308 영구 리디렉션
4XX 클라이언트 오류
- 400 잘못된 요청
- 401 권한 없음
- 402 지불 필요
- 403 금지
- 404 찾을 수 없음
- 405 허용되지 않는 방법
- 406 허용되지 않음
- 407 프록시 인증 필요
- 408 요청 시간 초과
- 409 충돌
- 410 사라지다
- 411 필요한 길이
- 412 전제 조건 실패
- 413 페이로드가 너무 큼
- 414 URI가 너무 깁니다.
- 415 지원되지 않는 미디어 유형
- 416 범위가 만족스럽지 않음
- 417 예상 실패
- 418 나는 찻주전자
- 420 메소드 실패
- 421 잘못된 요청
- 422 처리할 수 없는 개체
- 423 잠김
- 424 실패한 종속성
- 426 업그레이드 필요
- 428 필수 조건
- 429 너무 많은 요청
- 431 요청 헤더 필드가 너무 큼
- 451 법적 이유로 사용할 수 없음
5XX 서버 오류
- 500 내부 서버 오류
- 501 구현되지 않음
- 502 나쁜 게이트웨이
- 503 서비스 이용 불가
- 504 게이트웨이 시간 초과
- 505 HTTP 버전이 지원되지 않음
- 506 Variant 또한 협상
- 507 스토리지 부족
- 508 루프 감지됨
- 510 확장되지 않음
- 511 네트워크 인증 필요
Prince Dholakiya
질문은 DELETE 가 200 대 204를 "반환해야 하는지"에 대해 자세히 알아보기 때문에 일부 사람들은 링크가 있는 엔터티를 반환하도록 권장하므로 기본 설정은 200 임을 고려할 가치가 있습니다.
"204(콘텐츠 없음)를 반환하는 대신 API가 도움이 되고 갈 곳을 제안해야 합니다. 이 예에서 제공할 분명한 링크 중 하나는" 'somewhere.com/container/'(마이너스 '리소스') "- 클라이언트가 방금 리소스를 삭제한 컨테이너입니다. 아마도 클라이언트가 더 많은 리소스를 삭제하기를 원할 것이므로 유용한 링크가 될 것입니다."
http://blog.ploeh.dk/2013/04/30/rest-lesson-learned-avoid-204-responses/
클라이언트가 204 응답을 만나면 포기하거나 API의 진입점으로 이동하거나 방문했던 이전 리소스로 돌아갈 수 있습니다. 두 옵션 모두 특히 좋지 않습니다.
개인적으로 나는 204가 틀렸다고 말하지 않을 것입니다(저자도 마찬가지입니다. 그는 "성가신 일"라고 말합니다). 왜냐하면 클라이언트 측에서 좋은 캐싱은 많은 이점을 가지고 있기 때문입니다. 어느 쪽이든 일관성이 있는 것이 가장 좋습니다.
KCD
2014년 6월에 RFC7231은 RFC2616을 사용하지 않습니다. HTTP를 통해 REST를 수행하는 경우 RFC7231 은 GET, PUT, POST 및 DELETE에서 예상되는 동작을 정확히 설명합니다.
Ivan
{ "VALIDATON_ERROR": { "code": 512, "message": "Validation error" }, "CONTINUE": { "code": 100, "message": "Continue" }, "SWITCHING_PROTOCOLS": { "code": 101, "message": "Switching Protocols" }, "PROCESSING": { "code": 102, "message": "Processing" }, "OK": { "code": 200, "message": "OK" }, "CREATED": { "code": 201, "message": "Created" }, "ACCEPTED": { "code": 202, "message": "Accepted" }, "NON_AUTHORITATIVE_INFORMATION": { "code": 203, "message": "Non Authoritative Information" }, "NO_CONTENT": { "code": 204, "message": "No Content" }, "RESET_CONTENT": { "code": 205, "message": "Reset Content" }, "PARTIAL_CONTENT": { "code": 206, "message": "Partial Content" }, "MULTI_STATUS": { "code": 207, "message": "Multi-Status" }, "MULTIPLE_CHOICES": { "code": 300, "message": "Multiple Choices" }, "MOVED_PERMANENTLY": { "code": 301, "message": "Moved Permanently" }, "MOVED_TEMPORARILY": { "code": 302, "message": "Moved Temporarily" }, "SEE_OTHER": { "code": 303, "message": "See Other" }, "NOT_MODIFIED": { "code": 304, "message": "Not Modified" }, "USE_PROXY": { "code": 305, "message": "Use Proxy" }, "TEMPORARY_REDIRECT": { "code": 307, "message": "Temporary Redirect" }, "PERMANENT_REDIRECT": { "code": 308, "message": "Permanent Redirect" }, "BAD_REQUEST": { "code": 400, "message": "Bad Request" }, "UNAUTHORIZED": { "code": 401, "message": "Unauthorized" }, "PAYMENT_REQUIRED": { "code": 402, "message": "Payment Required" }, "FORBIDDEN": { "code": 403, "message": "Forbidden" }, "NOT_FOUND": { "code": 404, "message": "Not Found" }, "METHOD_NOT_ALLOWED": { "code": 405, "message": "Method Not Allowed" }, "NOT_ACCEPTABLE": { "code": 406, "message": "Not Acceptable" }, "PROXY_AUTHENTICATION_REQUIRED": { "code": 407, "message": "Proxy Authentication Required" }, "REQUEST_TIMEOUT": { "code": 408, "message": "Request Timeout" }, "CONFLICT": { "code": 409, "message": "Conflict" }, "GONE": { "code": 410, "message": "Gone" }, "LENGTH_REQUIRED": { "code": 411, "message": "Length Required" }, "PRECONDITION_FAILED": { "code": 412, "message": "Precondition Failed" }, "REQUEST_TOO_LONG": { "code": 413, "message": "Request Entity Too Large" }, "REQUEST_URI_TOO_LONG": { "code": 414, "message": "Request-URI Too Long" }, "UNSUPPORTED_MEDIA_TYPE": { "code": 415, "message": "Unsupported Media Type" }, "REQUESTED_RANGE_NOT_SATISFIABLE": { "code": 416, "message": "Requested Range Not Satisfiable" }, "EXPECTATION_FAILED": { "code": 417, "message": "Expectation Failed" }, "IM_A_TEAPOT": { "code": 418, "message": "I'm a teapot" }, "INSUFFICIENT_SPACE_ON_RESOURCE": { "code": 419, "message": "Insufficient Space on Resource" }, "METHOD_FAILURE": { "code": 420, "message": "Method Failure" }, "UNPROCESSABLE_ENTITY": { "code": 422, "message": "Unprocessable Entity" }, "LOCKED": { "code": 423, "message": "Locked" }, "FAILED_DEPENDENCY": { "code": 424, "message": "Failed Dependency" }, "PRECONDITION_REQUIRED": { "code": 428, "message": "Precondition Required" }, "TOO_MANY_REQUESTS": { "code": 429, "message": "Too Many Requests" }, "REQUEST_HEADER_FIELDS_TOO_LARGE": { "code": 431, "message": "Request Header Fields Too" }, "UNAVAILABLE_FOR_LEGAL_REASONS": { "code": 451, "message": "Unavailable For Legal Reasons" }, "INTERNAL_SERVER_ERROR": { "code": 500, "message": "Internal Server Error" }, "NOT_IMPLEMENTED": { "code": 501, "message": "Not Implemented" }, "BAD_GATEWAY": { "code": 502, "message": "Bad Gateway" }, "SERVICE_UNAVAILABLE": { "code": 503, "message": "Service Unavailable" }, "GATEWAY_TIMEOUT": { "code": 504, "message": "Gateway Timeout" }, "HTTP_VERSION_NOT_SUPPORTED": { "code": 505, "message": "HTTP Version Not Supported" }, "INSUFFICIENT_STORAGE": { "code": 507, "message": "Insufficient Storage" }, "NETWORK_AUTHENTICATION_REQUIRED": { "code": 511, "message": "Network Authentication Required" } }
Rohit Parte
출처 : http:www.stackoverflow.com/questions/2342579/http-status-code-for-update-and-delete
'etc. > StackOverFlow' 카테고리의 다른 글
가계도 소프트웨어의 주기 (0) | 2022.02.15 |
---|---|
Mathematica로 Waldo를 어떻게 찾나요? (0) | 2022.02.15 |
stdin에서 어떻게 읽습니까? (0) | 2022.02.15 |
GET 매개변수에서 값을 가져오는 방법은 무엇입니까? (0) | 2022.02.15 |
Git의 다른 분기에서 변경 사항을 선택적으로 병합하거나 선택하려면 어떻게 해야 합니까? (0) | 2022.02.15 |