자동 증가 키에 POST 대신 PUT을 사용하거나 리소스 ID에 자동 증가 키를 사용하지 않는 것이 좋습니다.
POST를 사용하는 경우 /users/1
이 아닌 /users
으로 게시됩니다. 답장은 /users/1
또는 ID가 무엇이든 리디렉션 할 수 있습니다.
PUT을 사용하는 경우 /users/10292829
으로 PUT 할 수 있습니다. 여기서 번호는 클라이언트에서 생성 된 고유 한 리소스 키입니다. 이 키는 시간 생성이 가능하거나 시간, 세션 ID 및 클라이언트 청중 전체의 가치의 고유성을 보장하는 기타 요인의 해시 일 수 있습니다. 그런 다음 서버는 10292829
또는 다른 것과는 다른 자체 증가 색인을 생성 할 수 있습니다.
이에 대한 자세한 내용은 PUT vs POST in REST
가 다음을 참조하십시오. . .
/users/XXXXXXX에 PUT을 허용하는 경우 모든 사용자가 동일한 리소스를 참조하는 두 개의 고유 한 고유 키로 끝납니다. (10292829 및 1은 동일한 사용자를 나타낼 수 있음). REST 스타일 URL에서 이러한 각기 다른 키를 사용하는 방법을 결정해야합니다. 이 두 개의 별개 ID의 사용을 조정해야하기 때문에 첫 번째 옵션 인 /users
에 게시하고 응답에서 생성 된 리소스의 고유 한 REST URL을 얻는 것을 선호합니다.
난 그냥 the relevant section of RFC 2616을 다시 읽고, 특히 REST 애플리케이션이 위해 설계된 리턴 코드 보았다 : 새로운 자원이
을 만든
10.2.2 (201) 요청이 충족되었습니다 및 결과 창조되고있다. 새로 생성 된 자원은 응답의 엔티티에서 반환 된 URI로 참조 될 수 있으며, 위치 헤더 필드에 의해 주어진 자원에 대해 가장 특정한 URI를가집니다. 응답에는 사용자 또는 사용자 에이전트가 가장 적합한 자원 특성 및 위치를 선택할 수있는 자원 특성 및 위치 목록을 포함하는 엔티티가 포함되어야합니다 (SHOULD). 엔티티 형식은 Content-Type 헤더 필드에 지정된 미디어 유형으로 지정됩니다.오리진 서버는 201 상태 코드를 리턴하기 전에 자원을 작성해야합니다 (MUST). 작업을 즉시 수행 할 수없는 경우 서버는 대신 202 (허용) 응답으로 응답해야합니다 (SHOULD).
그래서, 갈 수있는 편안하고 방법은 /users
에 게시하고 /users/1
를 지정하는 Location:
헤더와 더불어, 201 Created
을 반환하는 것입니다.
내 REST API는 현재 POST를 지원하지만 업데이트를 허용하려면 PUT도 지원하고 싶습니다. 따라서 클라이언트 측에서 고유 한 ID를 전달하는 복잡성을 피하려면 리소스를 만들려고하지 않고 리소스가 존재하지 않으면 단순히 PUT을 반환해야합니다. 여전히 RESTful이라고 생각할 수 있습니까? – James
예, 'PUT'은 업데이트 용입니다. PUT이 전송 된 URI가 사용 가능한 리소스를 참조하지 않으면 404가 반환하는 것이 합리적입니다. REST/JSON 인 경우 응답의 메시지 본문에 json 형식의 오류 메시지를 포함 할 수 있습니다. '{ "error": "자원이 없습니다."}'. 그러나 메시지 본문에 정보를 보내는 것은 상태 코드가 전달하는 정보를 추가하는 경우에만 적절합니다. "존재하지 않음"이 메시지 인 경우 404이면 충분하며 메시지 본문이 필요하지 않습니다. – Cheeso
멋지다. 그래서'PUT'을 사용하면 실제로 생성할지 여부를 선택할 수있다. 내 시나리오에서 생각해 보면'PUT'은 (자원이 존재한다면) 순전히 업데이트를 위해 사용될 것입니다. 감사! – James