REST 의 R 은 자원을 나타냅니다.
(Representational의 약자이기 때문에 사실이 아니지만 REST에서 리소스의 중요성을 기억하는 것이 좋습니다.)
정보 PUT /groups/api/v1/groups/{group id}/status/activate
: "활성화"를 업데이트 하지 않습니다 . "활성화"는 문제가 아니라 동사입니다. 동사는 결코 좋은 자원이 아닙니다. 경험 법칙 : 동사 인 동작이 URL에 있으면 RESTful이 아닐 수 있습니다.
당신은 대신 무엇을하고 있습니까? 그룹에서 활성화 를 "추가", "제거"또는 "업데이트" 하거나 원하는 경우 : 그룹에서 "상태"-자원 조작. 개인적으로, "상태"는 "상태"개념보다 덜 모호하기 때문에 "활성화"를 사용합니다. 상태를 만드는 것이 모호하며 활성화를 만드는 것은 아닙니다.
POST /groups/{group id}/activation
활성화를 작성하거나 작성을 요청합니다.
PATCH /groups/{group id}/activation
기존 활성화에 대한 일부 세부 사항을 업데이트합니다. 그룹에는 하나의 활성화 만 있기 때문에 어떤 활성화 리소스를 참조하는지 알고 있습니다.
PUT /groups/{group id}/activation
이전 활성화를 삽입하거나 바꿉니다. 그룹에는 하나의 활성화 만 있기 때문에 어떤 활성화 리소스를 참조하는지 알고 있습니다.
DELETE /groups/{group id}/activation
활성화를 취소하거나 제거합니다.
이 패턴은 그룹의 "활성화"에 지불, 우편 발송 등 부작용이있을 때 유용합니다. POST 및 PATCH 만 이러한 부작용이있을 수 있습니다. 예를 들어 활성화 삭제로 메일을 통해 사용자에게 알려야하는 경우 DELETE가 올바른 선택이 아닙니다. 이 경우 당신은 아마 할 비활성화 리소스를 만들 : POST /groups/{group_id}/deactivation
.
이 표준 계약을 통해 클라이언트와 클라이언트와 사용자 사이의 모든 프록시와 계층에 대해 명확하게 재 시도 할 수있는시기와 그렇지 않은시기를 알 수 있으므로 이러한 지침을 따르는 것이 좋습니다 . 클라이언트가 비정상적인 무선 랜을 가지고 있고 사용자가 "비활성화"를 클릭하면 다음을 트리거한다고 가정 해 봅시다 DELETE
. 실패하면 클라이언트가 404, 200 또는 처리 할 수있는 다른 것을 얻을 때까지 단순히 다시 시도 할 수 있습니다. 그러나 그것이 트리거되면 POST to deactivation
다시 시도하지 않는다는 것을 알고 있습니다 : POST는 이것을 의미합니다.
모든 클라이언트는 이제 계약을 맺었으며, 이는 HTTP 라이브러리가 백엔드 호출을 계속 재 시도하기 때문에 "그룹이 비활성화되었습니다"라는 42 개의 이메일을 보내지 않도록 보호합니다.
단일 속성 업데이트 : PATCH 사용
PATCH /groups/{group id}
속성을 업데이트하려는 경우 예를 들어 "상태"는 설정할 수있는 그룹의 속성 일 수 있습니다. "상태"와 같은 속성은 종종 화이트리스트 값으로 제한하기에 적합한 후보입니다. 예제는 정의되지 않은 JSON 스키마를 사용합니다.
PATCH /groups/{group id} { "attributes": { "status": "active" } }
response: 200 OK
PATCH /groups/{group id} { "attributes": { "status": "deleted" } }
response: 406 Not Acceptable
부작용없이 리소스를 교체하려면 PUT을 사용하십시오.
PUT /groups/{group id}
전체 그룹을 교체하려는 경우. 이것은 반드시 서버가 실제로 새 그룹을 만들고 이전 그룹을 버리는 것을 의미하지는 않습니다. 예를 들어 id는 동일하게 유지 될 수 있습니다. 그러나 클라이언트의 경우 이는 PUT 이 의미 할 수있는 것입니다. 클라이언트는 서버의 응답에 따라 완전히 새로운 항목을 얻는다고 가정해야합니다.
클라이언트는 PUT
요청이있을 경우 항상 전체 항목을 보내야하며 새 항목을 작성하는 데 필요한 모든 데이터가 있어야합니다. 일반적으로 POST 작성과 동일한 데이터가 필요합니다.
PUT /groups/{group id} { "attributes": { "status": "active" } }
response: 406 Not Acceptable
PUT /groups/{group id} { "attributes": { "name": .... etc. "status": "active" } }
response: 201 Created or 200 OK, depending on whether we made a new one.
매우 중요한 요구 사항은 PUT
dem 등원입니다. 그룹을 업데이트하거나 활성화를 변경할 때 부작용이 필요한 경우을 사용해야합니다 PATCH
. 따라서 업데이트로 인해 메일 발송이 발생하면를 사용하지 마십시오 PUT
.