2012-05-11 5 views
1

리소스를 중첩할지 여부를 결정할 때 어떤 기준을 사용합니까?Rails에서 중첩 된 리소스를 선택하는 가장 좋은 방법은 무엇입니까?

과거에는 자원에 대한 색인 조치가 관련 자원 (상위)에 적용되지 않는 한 의미가 없으면 중첩하도록 선택했습니다.

위의 기준을 작성하더라도 가장 잘 모호합니다. 그것은 시각적으로 URL 구조에서 관련 모델의 관계를 포착하기 때문에

둥지 자원을 ... 그리고 그것은 쉽게 그냥 게시물에 다시 얻을 수있는 URL을 수정할 수 있습니다 :

동료는 주장했다 ./posts/123/offers/555를 볼 경우 -/posts/123에 가서 내 게시물을 볼 수 있음을 안다. 마치 제가/제안/555를 보았던 것처럼 수동으로 사이트를 탐색하는 것 이외의 방법으로는 해당 게시물로 돌아갈 방법이 없습니다.

나에게 사용자의 URL 조작은 응용 프로그램 아키텍처에 영향을 미치지 않아야하며 가능하면 중첩 된 자원을 피해야한다는 일반적으로 유지되는 원칙으로 이해합니다. 또한,이 인수는 여러 수준의 중첩을 지원하는 것으로 보입니다. 다시 말해, 내가 읽은 거의 모든 기사가 이에 대해 조언합니다.

귀하의 경험은 무엇입니까?

답변

0

경로를 나중에 넣을 때 경로를 중첩시키지 마십시오. 블로그에 대한 의견은 resources articles 아래에 중첩됩니다. 왜냐하면 독자적인 페이지 (독자는 이유를 알고있는 사람)를 개별적으로 표시하고 싶지만 의견은 기사에 속하기 때문입니다.

컨트롤러 구현도 있습니다. 기사를 아는 경우 기사에 적용되는 특정 설명을 찾을 수 있습니다. 이는보다 효과적인 질의를 가능하게합니다.

또한 동료가 잘못된 이유가 있지만 경로를 어지럽히는 사용자를 다루어야한다는 것이 맞습니다. 편의를위한 것이 아니라 보안을위한 것입니다.

사용자 및 주문이있는 Amazon과 같은 앱을 사용해 봅시다. 내가 users/5/orders/2에 있다면 나는 "어이! 내가 5를 4로 바꿀 수 있고 다른 사람의 명령을 볼 수있다"고 생각한다. 주문 범위를 지정하지 않으면 사용자에게 orders/2을 볼 수있는 권한을 부여하는 컨트롤러 수준 논리가 훨씬 까다로워집니다. 사용자 범위를 지정하면 orders 컨트롤러에서 current_user.orders.find(params[:id])을 사용할 수 있습니다. 현재 사용자는 인증을 기반으로 찾을 수 있으므로 URL의 ID를 바꿔 다른 사람이 될 수 없습니다.

+1

Amazon과 같은 예제는 실제로 중첩 된 경로의 가치를 설명하지 않습니다. current_user.orders를 수행하는 경우 사용자/5/orders/2의 "users/5"는 완전히 불필요합니다. 그래서 나는 그것이 어떻게 보안의 예가되는지 보지 못합니다./orders/2는 똑같은 일을 할 수 있습니다 : current_user.orders.find (params [: id]) ... 그래서 요점을 얻지는 못합니다. 나는 중첩 경로가 전혀 가치가 없기 때문에 적절한 경로가 아닌 예인 것처럼 느껴질 수 있습니다. – patrick

관련 문제