2013-04-23 6 views
4

나는 Post 엔티티 목록이 있으며 각 게시물에는 Comment 엔티티 목록이 있습니다. Post 엔터티는 컴포지션 개체입니다. 게시물이없는 시스템에는 주석이 없습니다. URI의REST API에서 "가짜"ID 생성

예 :

/posts/3453/comments/8547

이 특정 코멘트를 검색하고, 또한 삭제하고 특정 주석을 업데이트하는 데 사용됩니다. 내 API는 이런 일이 있다면 지금, 그것은 더 나은되지 않을 것 : 첫 번째 URI의 코멘트 ID 8547 마지막과 동일하지만, ID가의 맥락에서

/posts/3453/comments/1

게시하다. 하나부터 시작하여 더 많은 주석이 추가 될 때마다 증가합니다. 그러나 1-10의 ID를 가진 10 개의 댓글이 있고 5 번을 삭제 한 경우 1-9가 적용되도록 ID를 업데이트해야합니까?

합리적으로 들릴까요? 방금 생각해보기 시작했는지 아니면 데이터베이스의 고유 ID (기본 키)를 사용해야합니까? 그렇지 않다면 어떻게 이런 종류의 ID를 만들겠습니까?

답변

3

시퀀스 번호로 설명을 선택하면 이것이 사용자의 취향입니다. 응용 프로그램의 개념에서 주석 식별자를 고유하게 식별하는 것은 게시 식별자와 관련하여 시퀀스 번호 일 때 문서화되는 한 완벽하게 훌륭한 디자인입니다.

재 시퀀싱 방식에는 최소한 두 가지 주요 단점이 있습니다. 이로 인해 응용 프로그램 URI 설계에 결함이 발생할 수 있습니다. 첫 번째 몰락은 항목 2가 변경되지 않았기 때문에 URI에 대한 GET 메소드가 캐시 가능해야하며, 순서 재 지정은이 계약을 어기는 것이지만 항목 1은 이제/2가 의미하는 바를 변경했기 때문입니다. 다음으로 이것은 분명히 사람들이 만들었을지도 모를 링크를 끊을 것입니다.

나는 시퀀스에 대한 쿼리 매개 변수의 개념을 좋아하지만, 위에서 언급 한 두 가지 단점이 더 이상 문제가 아니기 때문에 단순히 식별자를 사용하는 것이 나의 제한된 이해에서 의미가 있다고 생각합니다.

2

색인 구조를 사용하는 대신 주석의 실제 ID를 사용합니다. 행에 여러 개의 업데이트가있는 경우 어떻게됩니까? 사용자 A는 사용자 B가 색인 3에서 주석을 삭제하는 것과 동시에 색인 2에서 주석을 삭제합니다. 실제로 어떤 주석을 삭제해야합니까? 실제 삭제는 실행 순서에 따라 결정됩니다. 실제 ID를 사용하면 해당 경합이 발생하지 않습니다.

3

숫자 85471은 동일한 모양이지만 서로 다른 개념을 나타내는 : 8547식별자이다 1는 시퀀스 번호된다. 순서 번호는 변경 될 수 있지만 ID가 변경되지는 않습니다.

나는 특정 주석 자원을 식별하는 ID와 URI를 사용하는 것이 좋습니다,이 같은, 그 일련 번호에 의해 코멘트 리소스를 검색하는 기능을 쿼리와 UIR를 추가 :

/posts/3453/comments?sequence=1 

이 방법이 "표준"자원 URI에 대한 질문은 없지만 클라이언트는 완전한 식별을 제공 할 필요없이 주석을 쿼리 할 수 ​​있습니다.

관련 문제