게임에 늦었을 수도 있지만 REST API를 만들려고 할 때이 시맨틱 문제를 발견했습니다.
Wrikken의 답변을 조금 확장하려면 상황에 따라 409 Conflict
또는 403 Forbidden
상황에 따라 사용할 수 있다고 생각합니다 . 즉, 사용자가 충돌을 해결하고 요청을 완료하기 위해 아무것도 할 수없는 경우 403 오류를 사용하십시오 (예 : DELETE
명시 적으로 리소스를 제거하도록 요청하거나, 가능한 경우 409를 사용하십시오.
서버가 요청을 이해했지만 요청 이행을 거부하고 있습니다. 승인은 도움이되지 않으며 요청을 반복해서는 안됩니다. 요청 방법이 HEAD가 아니고 서버가 요청이 이행되지 않은 이유를 공개하기를 원한다면, 엔티티에서 거절 이유를 설명해야한다. 서버가이 정보를 클라이언트가 사용할 수 없게하려면 상태 코드 404 (찾을 수 없음)를 대신 사용할 수 있습니다.
요즘 누군가가 "403"이라고 말하고 권한 또는 인증 문제가 떠오른다. 그러나 스펙은 기본적으로 서버가 클라이언트에게 요청하지 않을 것이라고 알리고 다시 묻지 말고 클라이언트가 '티.
PUT
vs. POST
...에 관해서 POST
는 사용자가 리소스에 대한 식별자를 만들거나 수단을 만들지 않아야 할 때 리소스의 새 인스턴스를 만드는 데 사용해야합니다. PUT
자원의 아이덴티티가 알려진 경우에 사용됩니다.
...
POST와 PUT 요청의 근본적인 차이점은 Request-URI의 다른 의미에 반영됩니다. POST 요청의 URI는 동봉 된 엔터티를 처리 할 리소스를 식별합니다. 이 리소스는 데이터 수락 프로세스, 다른 프로토콜의 게이트웨이 또는 주석을 허용하는 별도의 엔티티 일 수 있습니다. 반대로 PUT 요청의 URI는 요청으로 둘러싸인 엔티티를 식별합니다. 사용자 에이전트는 의도 된 URI를 알고 있으며 서버는 요청을 다른 자원에 적용해서는 안됩니다. 서버가 요청을 다른 URI에 적용하기를 원하는 경우,
반드시 301 (영구적으로 이동) 응답을 보내야합니다. 그런 다음 사용자 에이전트는 요청을 리디렉션할지 여부에 대한 자체 결정을 내릴 수 있습니다.