2015-01-02 6 views
0

다른 개체에 대한 참조/외래 키가 포함 된 모델을 만들거나 편집 할 때 해당 개체의 URI를 사용해야합니다. 예를 들어 UserGroup의 두 클래스가 있다고 가정 해 보겠습니다. 각 Group에는 User이 많이 있고 각 User은 정확히 하나의 그룹에 속할 수 있습니다. 나는 이것이의 원칙 중 하나에 관련되어 생각tastypie : ID 대신 uri를 사용하여 객체를 참조하는 이유는 무엇입니까?

{"name":"John Doe", "group":"/path/to/group/1/"} 

대신

{"name":"John Doe", "group_id":1} 

: 우리가 User를 작성하는 경우

다음, 우리는 다음과 같다 객체를 보낼 수 있습니다 HATEOAS,하지만 ID보다는 리소스 URI를 사용하는 이유를 찾을 수 없습니다. uri를 사용하는 데는 어떤 이유가 있습니까?

(더 나은 인에 대한 의견에 관심이 아니지만, 모든 자원에 그 날이 디자인의 선택을 이해하는 데 도움이 될 수 있습니다.)

답변

1

내가 가장 간단한 이유 때문이다 자상

할게요 귀하의 1과 같은 대리 키는 시스템 경계 내에서만 의미가 있습니다. 그것들은 시스템 밖에서 무의미합니다.

확장하면 그룹을 식별하는 URL에는 제한이없고 해당 URL의 응답에서 수집 한 리소스의 적합성 만 적용되도록 앱을 만들 수 있습니다. 두 시스템이 그룹이 무엇인지 협상 할 수있는 한, 누군가가 FaceBook 시스템의 그룹에있는 사용자를 시스템에 추가 할 수 있습니다. 그룹과 같은 개념에 대한 표준이 있으며 그러한 일을하는 것은 불가능하지 않습니다.

이것은 대부분의 웹 앱이 작동하는 방식입니다. EG : 위키 피 디아 문서의 인용 링크는 다른 기사를 가리킬 수 있습니다 (wiki 트롤이 적절한 인용 자원이 아니기 때문에이를 제거 할 때까지 ...)

이와 같이 앱 작업을하는 것이 RESTful 적합성에 더 가깝습니다. . RESTful 아키텍처를 좋은 생각으로 생각하는지 여부는 우리가 논의하지 말 것을 요청한 것이므로 그렇게하지 않을 것입니다.

또 다른 장점은 설정을 완전히 다시 키잉 할 수 있다는 것입니다. 처음에는 이것을 무시할 수는 있지만 ... id에 1을 실제로 사용하면 int 또는 long이며, 곧 그 값을 다 쓸 것입니다. 또한 그러한 id는 당신이 그들을 적절히 배열해야한다는 것을 의미합니다. 어떤 시점에서 ID로 guid를 사용했으면 좋을 것입니다. 기존 ID 체계를 고수하는 사람은 누구나 유산으로 간주됩니다. 이 URL은 약간의 추상화를 제공합니다. 오래된 URL은 기존 항목으로 남아 있지만 기존 URL을 식별하는 것보다 쉽습니다 (거의 부여되지 않았습니다. 길거나 GUID가 있지만 URL을/old/path/group/1 vs/new/path/group /로보기가 쉽습니다. 일반적으로 URL을 사용하면 앞으로의 호환성과 성장 여지가 조금 더 넓어집니다.

또한 URL을 식별자로 제공하면 클라이언트가 그 정보에 대한 정보를 매우 쉽게 찾을 수 있습니다. 자체 링크가 매우 편리합니다. 그룹에 대한 언급이 있다고 가정 해 봅시다 : 1 ... 그게 무슨 소용입니까? 얼마나 많은 UI가 "그룹 1 추가"라는 컨트롤을 보여줄 것인가? 더 많이 보여주고 싶을거야. 선택 항목의 식별자로 URL을 전달하면 클라이언트는 선택 항목이 실제로 무엇인지에 대해 더 많은 정보를 검색 할 수 있습니다. 일부 응용 프로그램에서는이 객체를 처리하기 위해 전체 객체 (ID가 포함될 수 있음)를 전달할 수 있지만 이후 검색을 위해 URL을 저장하는 것이 좋습니다 (책갈피를 생각하는 것).더 중요한 것은 항상 최신 상태를 얻기 위해 해당 객체를 정기적으로 새로 고칠 수 있다는 점입니다. 자체 링크는 매우 멋지게 할 수 있으며, 항상 포함시킬만큼 유용하다고 주장 할 것입니다. 항상 포함 된 자체 링크가 리소스를 식별하는 경우 ... 보조 식별자로 대리 키를 제공해야하는 이유는 무엇입니까? ?

한 쪽 메모. 나는 url을 매개 변수로 요구하는 서비스를 피하려고 노력한다. 사용자가 링크를 통해 가능한 그룹 멤버쉽을 제공하는 것보다 클라이언트를 선호하고 클라이언트가 비회원에서 멤버십으로 상태 전환을 요청하도록 선택할 수 있습니다. "그룹으로 사용자를 생성"해야한다면 새로운 사용자를 서비스에 실제로 제출/투입하기 전에 중간 상태로 진행할 것입니다. 고객이 제공해야하는 정보가 적을수록 응용 프로그램을 더 쉽게 사용할 수 있다는 것을 알았습니다.

+0

답변 해 주셔서 감사합니다. 매우 유용합니다. 나는 그것을 읽음으로써 많은 것을 배웠다. 나는 클라이언트가 서버에 URI를 다시 전달하도록 요구함으로써 클라이언트가 당신이 제공 한 키를 사용하도록 강제 할 것이고, 키가 무엇인지에 대한 변경으로부터 약간의 분리를 고려할 것이라고 생각하지 않았다. – Denise