정렬 된 목록을 나타내는 것은 관계형 데이터베이스의 어려운 문제 중 하나입니다. 목록 멤버쉽 관계에 위치 특성을 추가하는 것이 가장 일반적인 방법입니다. ORDER BY position
SQL 쿼리 에 추가하여 정렬 된 목록을 쉽게 검색 할 수 있고 평균을 계산하여 목록 중간에 항목을 쉽게 삽입 할 수 있기 때문입니다. 위치가 정수가 아니라 부동 소수점이라고 가정하고 이전 및 후속 목록 멤버의 값
실수로 링크를 일관성있게 만들지 않고 대신 순환 그래프 나 트리로 끝나기 때문에 이중 링크리스트를 사용하지 않아야합니다.
그러나 RESTful API에는 관계형 데이터베이스의 제한이 없습니다. 위치 속성과 같은 핵을 사용하는 대신 자연스러운 느낌을 줄 수 있습니다.
목록에 최대 수백 개의 요소 만있는 경우 요청에서 전체 목록을 전송하십시오. [1, 2, 3, 4]
리스트 멤버가 ID 인 곳 을 재정렬하고 싶다고 가정하면
POST /url/of/the/list
Content-type: application/json
...
[1, 2, 4, 3]
그러면 백엔드는이를 사용중인 데이터베이스 기술로 변환 할 수 있지만 API 사용자는 이러한 세부 사항을 고려할 필요가 없습니다.
목록이 크고 항목이 일반적으로 개별적으로 요청되는 경우 url에 색인을 허용 할 수 있습니다.
GET /page/7
HATEOAS를 사용하는 경우 리소스가 일반적으로 그렇게 소비되는 경우 응답에 이전 / 다음 링크가 포함되어 탐색을 간단하게 만들 수 있습니다. 그러나 데이터베이스에이 이중 연결 목록도 포함되어 있다는 의미는 아닙니다.
목록이 매우 큰 경우 또는 / ArrayList
와 같은 유사한 작업 을 노출 할 수 있습니다 . 나는 같은 전화를 상상할 수 있었다insert
push
append
POST /url/of/the/list?at=1357;mode=insert
...
description of the item to insert
재정렬이 일반적인 사용 사례이고 재정렬이 즉시 커밋되어야하는 경우 API에서 적절한 엔드 포인트를 제공 할 수 있습니다.
POST /url/of/the/list/reorder-item?from=783;to=1357
재정렬 된 목록을 명시 적으로 커밋해야하는 경우 새 주문을 JSON 문서로 이전하는 것이 더 쉽습니다 (위 참조).
이제 API를 사용중인 데이터베이스 기술과 완전히 분리 된 것으로 볼 수있는 것은 사실이 아닙니다. 그러나 구현 세부 사항에서 가능한 한 외부 API를 최대한 유지하는 것이 가장 좋습니다. 정수 순서 열을 업데이트하기 위해 재정렬이 약 30 행에 닿아도 큰 문제는 아닙니다. 가능한 가장 간단한 일을하고 항상 전체 목록을 업데이트하십시오. 규모에 따라 데이터베이스를보다 정교하게 사용해야하는 경우 백엔드에서 이러한 정교성을 캡처하여 일관성을 유지하기가 더 쉽습니다.