2015-01-13 2 views
1

자식 리소스를 모델링하는 방법에 대해 머리를 감싸는 데 어려움을 겪고 있습니다.REST 하위/하위 리소스 단일 엔터티

저자와 함께 도서의 예를 들어보세요. 단 하나의 저자와 함께 N 권의 책을 가질 수 있습니다.

/books GET 
/books POST 
/books/id PUT 
/books/id DELETE 

지금까지 쉽게.

책에 저자를 추가하는 경우는 어떻게됩니까? 적어도이 예에서 각 책에는 한 명의 저자 만 있습니다.

POST는 대개 내가 만드는 것처럼 혼란스럽게 보입니다. 저자가 이미 설정되어있는 경우 api 사용자는 실제로 오래된 저자를 삭제하고 새로운 저자로 교체 할 때 새로운 저자를 작성하고 있다고 생각합니다. 업데이 트를 그 책의 저자 자원을 의미

/books/id/author PUT 

날 잎

. 조금 더 의미가 있습니다. 그러나 저자가 없을 때 처음은 어떨까요? 실제로 업데이트가 아니라 초기 생성? 어쩌면 단지 그것에 대해 생각하는 것은 무의미한 저자를 업데이트하는 것입니다.

자식 리소스일까요? 복잡한 대상이 될 것이므로 일종의 의미가 있습니다. 저자가 없으면 책을 가질 수 없다고 생각합니다. 그래서 나는 자식 리소스로 모델링해서는 안되며, 책 리소스를 만들거나 수정할 때 작성자 객체를 전달한다고해야합니다.

최종 생각. 저자를 루트 리소스로 모델링 할 생각은 없습니다. 그래서 적어도이 경우 그들은 단지 책의 자원하에 존재할 것입니다. 그리고 책 당 단 한 명의 저자.

+1

"하지만 저자가 없을 때 처음에는 어떨까요?" --- 여전히 의미 론적입니다. 'PUT'은 존재 여부에 관계없이 자원에 데이터를 저장합니다. – zerkms

답변

2

하지만 처음으로 작성자가 없으면 어떨까요? 실제로 업데이트가 아니라 초기 생성?

PUT /books/id/author 처음에는 작성자를 작성하면 나에게 잘 보입니다. PUT /books/client-supplied-id을 사용하여 클라이언트가 제공 한 ID로 책을 만들 수 있으므로 알려진 경로 세그먼트 author으로 식별되는 책의 저자를 만들 수 있습니다.

작성자는 책의 구성 요소로만 작성되므로이 URL 스키마는 문제가 없습니다.

관련 문제