2017-05-17 4 views
2

나는 이것이 실마리에 대해 시작된 gazillion'th 시간이라고 알고 있지만 내 특정 질문에 대한 답을 찾을 수 없습니다.휴식 서비스의 업데이트를 위해 POST와 PUT을 섞음

우리는 휴식 서비스에서 업데이트를 위해 PUT을 사용할지 여부에 대해 내부적 인 논의를가집니다. 우리는 PUT을 사용하는 것이 선호된다는 것에 동의했습니다. 그러나 PUT은 멱등수가되어야합니다. 이는 각각의 멱등환에 따라 다른 업데이트 경로에 POST 동사와 PUT 동사를 섞어 야한다는 것을 의미합니까?

구체적인 예로서. 우리는 업데이트 경로를 가지고 있습니다. 업데이트는 "자동차"라고합시다. 이 업데이트 경로에서는 (다른 것들 중에서도) 하이퍼 링크를 전달할 수 있습니다. 이 하이퍼 링크는 저장된 ID를 가져오고 업데이트 된 자동차에 링크됩니다. 그러나 자동차에서 업데이트 할 때마다 하이퍼 링크의 생성 된 ID가 달라집니다. 이것은 업데이트가 더 이상 멱등수가 아니라는 것을 의미합니까? 하이퍼 링크의 실제 대상이 같을 때도?

그렇다면 PUT 동사 대신 POST 동사를 사용해야합니다. 그러나 우리는 멱등수가 많은 다른 많은 업데이트 경로를 가지고 있습니다. 그들은 PUT을 유지해야합니까? 나는 이것이 서비스 소비자에게 매우 혼란 스러울 수 있다고 생각한다. 한마디로

: 그것은 좋은 PUT 혼합 아이디어와 POST가 멱등 여부에 여부에 따라 업데이트 경로에 대한

  • 입니까?
  • 동사의 일관성이 멱등 원 규칙보다 우선하며 모든 업데이트 경로에 PUT 만 사용해야합니까?
  • 아니면 PUT을 사용하고 어디에서나 혼란을 피하기 위해 POST를 사용하는 아이디어를 놓아 두어야합니까?

답변

1

나는 stackoverflow 외부의 사람들과 토론을 해왔다. 우리는 다음과 같은 결론에 도달 :

  • POST를 혼합 및 업데이트에 대한 PUT하는 것이 소비자에 대한 혼란, 좋은 생각이 아니다
  • 일관성은 사방 게시물을 사용하여 PUT
  • 의 나무 등의 규칙을하지 않는 소중 사람들이 업데이트를 위해 PUT을 사용하기 때문에 좋은 아이디어를 얻었습니다.

하이퍼 링크의 ID가 변경되지 않도록 코드 (초기 질문의 예에서)를 변경하는 것이 이상적입니다. 이 경우 PUT 또는 POST 사용에 대한 논의는 없습니다. 이 작업을 수행 할 수없는 경우 API 추가 정보에 '면책 조항'을 작성하여 일부 PUT 경로가 실제로 멱등환이 아님을 알립니다.

-1

POST를 사용하여 엔티티를 만들고 PUT (또는 부분 업데이트의 경우 PATCH)을 사용하여 엔티티를 업데이트하십시오.

엔티티에 특정 엔티티를 참조 할 수 없음을 나타내는 안정적인 고유 식별자가없고 POST를 사용해야하는 경우.

+0

내 엔티티는 안정적인 식별자를 가지고 있지만 엔티티의 하위 엔티티는 저장된 항목도 업데이트되며 하위 항목의 식별자가 변경됩니다.원래 질문에서 내 특정 질문에 대답 해 주시겠습니까? – PaulVrugt

0

일반적으로 규칙은 클라이언트가 작성중인 리소스의 대상 URI를 알고있는 경우 항상 PUT이 좋습니다. POST은 새 리소스를 만드는 데 널리 사용되지만 많은 API가 대상 URI를 결정하기 때문에 (예 : 데이터베이스가 자동 증가 ID를 사용하는 경우) 주로 그렇습니다.

+0

문제는 리소스를 생성하지 않고 업데이트하는 것입니다. 모두가 항상 리소스를 만드는 것에 대해 이야기하고 있습니다. 그래서이 질문을 만들었습니다. 내 원래 질문에서 내 특정 질문에 대답 해 주시겠습니까? – PaulVrugt