2010-07-25 5 views
1

나는 파티에 좀 늦었지만, REST가 일반적으로 그리고 Ruby on Rails에서 어떻게 작동해야하는지에 대해 두뇌를 감추려고 노력하고있다. 나는 이미 이것에 관해 온라인으로 많은 기사를 읽었지만, 여전히 큰 그림을 얻고있는 것처럼 느껴지지 않는다.Rails를 개념적으로 Rails로 이해하기

내가 알기에 REST는 일련의 포부 선언문으로, URL 하단에는 최종 결과가 포함되어 있어야하며 요청을 처리하는 데 필요한 모든 정보가 포함되어야하며 도착시에는 상태를 변경할 수 없어야합니다. 서버 및 기타 구체적인 지침을 제공합니다.

내가 알기에 Rails의 REST는 CRUD를 기반으로합니다. 즉, 모든 모델에는 작성, 읽기, 업데이트 및 삭제 작업이 있습니다. 이러한 각 작업은 경로에서 리소스를 매핑하여 생성 된 유사한 URL 집합을 통해 액세스됩니다. 따라서 로그인 URL은 사용자 세션을 생성하므로 URL은 example.com/session/new (POST 포함)이고 logout은 example.com/session/destroy (POST 포함)입니다.

이러한 방식으로 URL을 표준화하면 어떤 이점이 있습니까? 그것은 인간의 가독성을 희생시키면서 기계 가독성을 최적화하는 것으로 나를 공격합니다. 나는 당신이 노선 example.com/login에서 example.com/session/new로 다시 매핑 할 수 있다는 것을 알고있다. 그러나 그것은 나에게 분명히 이득이되지 않는 한 단계 더있다.

지금은 전통적인 경로를 사용하는 웹 사이트를 개발하는 것이 실제로 바람직하지 않다고 생각합니까?

또한 이러한 CRUD 작업 각각은 요청에서 찾는 응답 유형에 관계없이 요청에 응답 할 수 있어야합니다. 따라서 example.com/tasks에 대한 동일한 링크를 example.com/tasks.xml에서 호출하여 결과의 ​​xml 표현을 가져올 수도 있고 json 표현을 위해 example.com/tasks.json을 호출 할 수도 있습니다.

이것은 RESTful API가 사이트의 일반적인 링크 일뿐 XML이 추가 된 것이라고 말할 수 있습니까? 웹 API가 이런 방식으로 작동한다는 것은 매우 이상하고 어색한 것으로 생각되지만, 읽은 모든 것에 내포 된 것 같습니다. 저는 example.com/api/tasks와 같은 링크가있는 API를보고 작업 목록을 얻는 데 더 익숙합니다. 이 접근 방식의 장점은 무엇입니까?

+0

"사람의 가독성을 희생해서"? 나는 모든 것을위한 특정 URL 계획을 고수하고 반대 의견을 말하면 모든 것을 이해하고 작업하기가 쉽습니다. – deceze

+0

그러나 이미 일반 인간 (개발자가 아님)을위한 URL 체계가 있습니다. 모든 웹 지식 사용자가 이미 익숙하게 사용하는 방법은 example.com/login이라면 example.com/session/new가 아닌 ​​login으로 이동할 수 있습니다. 로그인과 같은 경우 REST URL 스키마로 전환하면 어떤 이점이 있습니까? 개발자가 이해하고 작업 할 부담을 덜어주기 위해서? 이것이 최종 사용자의 가독성을 향상시키는 방법을 알 수는 없습니다. –

+0

로그인의 전체적인 개념은 틀림없이 오히려 무방합니다. 왜냐하면 그것은 국가의 개념을 소개하기 때문입니다. 나는 RESTfulness가 URL 스키마를 이렇게 특정한 방법으로 처방한다고 생각하지 않는다.'/ login'은 여전히 ​​당신의 목적에 맞는 완벽한 URL *이다. 나는 * 일반적인 의미 * 특정 스키마를 고집하는 것은 인간의 가독성을위한 * 좋은 *입니다. 이미 말했듯이'/ login'은 이미 허용 된 스키마이므로 괜찮습니다. – deceze

답변

1

나머지는 "컨벤션 오버 규칙"을 제공합니다. 광범위하게 사용되는 제한된 공통 문제 (모델 전체에 대한 진지한 행동)의 경우, 나머지는 애플리케이션 개발 협약으로 매우 유용합니다.

이러한 방식으로 URL을 표준화하면 어떤 이점이 있습니까?

프로그래머 효율. 덜 생각해보십시오. 더 어려운 문제 등을 처리하는 데 더 많은 시간을 할애 할 수 있습니다. 더 쉬운 테스트. 등

는 지금 전통적인 경로를 사용하는 웹 사이트를 개발하기 위해 정말 나쁜 관행 을 생각인가?

예, 모델의 전체 레코드와 상호 작용하는 완료 작업.

또한, 이러한 CRUD 각 작업 요청이 찾고있는 응답의 어떤 유형 요청에 응답 할 수 있어야합니다. 예를 들어, 예와 동일한 링크가 있습니다.com/tasks를 (example.com/tasks.xml)이라고도 부르면 의 결과가 표시되고 example.com/tasks.json이면 표현이됩니다.

RESTful API 은 사이트의 일반적인 링크 일뿐 xml이 추가 된 것입니까?

예. API가 나머지 모델에 적합하다면 예. 큰 문제는 인증이라고 생각합니다. API에 상태 비 저장을 원하면 각 호출마다 인증을 포함시켜야 할 것입니다. 이 시점에서 HTTP 수준 인증을 사용하지 않으려면 자격 증명을 포함하는 방법을 결정해야합니다.

+1

좋은 답변입니다. 나는 상태가없는 api (폼, esp, 숨겨진 필드, 또는 쿠키 또는 서버 측 세션 저장소의 필요성과 반대 됨)를 추가하는 것은 북 마킹과 스크립팅을 상당히 쉽게 만듭니다. –

+1

우수 포인트 크리스토퍼. 필자는 쉘 스크립팅을 포함한 경량 API 클라이언트를 지원하는 것보다 "중량이 큰"API 클라이언트에 집중하여 서비스에 대한 API 액세스를 제공하는 사람들이 너무 자주 있다고 생각합니다. 각 API 호출에 자격 증명을 포함 시키면 실제로 후자와 함께 도움이됩니다. –