트리와 같은 리소스 구조를 위해 RESTfull 서비스를 만들고 있는데 최고의 URL 구조가 무엇인지 궁금하십니까?
세 가지 요구 사항이 있습니다.
- 루트 리소스 모음을 얻을 수있다
- 개별 자원을 얻을 수있다
- 아동 자료 모음을 얻을 수있다
내 현재 생각은 :
/rest/documents
/rest/documents/{id}
/rest/documents/{id}/documents
또한 목록 또는 개별 요소를 나타 내기 위해 단수 / 복수 경로를 사용하려고 생각했지만 단수와 동일한 복수 수의 리소스를 사용한다는 것을 알고 있으므로 이에 대해 결정했습니다.
아무도 위의 생각이 있습니까? 아니면 이것을 구조화하는 다른 / 더 나은 방법이 있습니까?
답변
내 마음에 오는 것은 RESTful API가 URL 자체의 재귀를 반영하지 않도록하십시오. 생각해 보면 당신의 자원은 문서 일뿐입니다.
재귀 구조에 따라 문서를 실제로 저장 한 경우 고유 ID에 대한 맵핑을 작성하고 URL에서 ID를 사용하십시오.
/rest/documents/{id}
이제 다음과 같은 문서가 있다면 :
| DocumentName | DocumentPath | DocumentID | -------------------------------------------- | ABC | / abc | 1 | | asd | / abc / asd | 2 | | asd | / asd | 3 | | 부 | / abc / asd / boo | 4 | | 이봐 | / abc / asd / hey | 5 |
요청은이 URL을 참조하여 /abc/asd
문서 를 작성합니다.
GET /rest/documents/2
따라서 이제 API 사용자에게 적은 노력으로 구조를 통과 할 수있는 수단을 제공해야합니다. 응답 페이로드 (문서)를 다음과 같은 추가 순회 정보를 포함하는 오브젝트로 랩핑하여 수행 할 수 있습니다.
{
data: { /* your document goes here */ },
parent: {"abc": 1 },
children: [ { "boo": 4 }, { "hey": 5} ]
}
사용자가 단일 레벨에서 너무 많은 문서를 작성하지 않을 것으로 예상되는 경우 하위 목록을 응답에 포함시킬 수 있습니다. 그렇지 않은 경우 사용자에게 하위 문서 ID를 검색하도록 제안 할 수 있습니다 (예 : querystring 매개 변수를 통한 결과 페이징 허용).
GET /rest/documents/2/children?page=2&size=50
마지막으로 querystring 매개 변수를 말하면 querystring 매개 변수를 통해 경로 정보를 직접 제공 할 수도 있습니다.
GET /rest/documents?path=somepath&page=1&size=42
언급 된 모든 접근 방식은 일반 GET /rest/documents
문서가 루트 문서 만 반환 할 것으로 예상합니다 .
답변
아마도 이런 것 :
/rest/{rootEntity}/Item/{leafEntity}/{id}
/rest/{entity}/ItemList
/rest/{entity}/ItemList/{leafEntity}
여기서 {rootEntity}는 컬렉션의 시작점이며 {leafEntity}는 트리 내의 명명 된 리프 노드입니다.
위의 매개 변수 중 몇 가지를 추가하여 최신 또는 모두 등을 선택할 수 있습니다.