2012-01-09 2 views
2

의 우리가이 같은 서버에서 JSON 응답 주어, 일부 자바 스크립트 모델 (예를 들어 backbone.js 모델)을 채우려한다고 가정 해 봅시다 :편안한 응답의 json 데이터에 객체 유형 정보가 있어야합니까?

{ 
    "todo": { 
    "title": "My todo", 
    "items": [ 
     { "body": "first item." }, 
     { "body": "second item"} 
    ] 
    } 
} 

이 데이터의 형식 정보를 포함하지 않는, 그래서 우리는 모른다 "todo" 키가 표시 될 때 모델을 채 웁니다.

물론 json 응답 객체의 키를 클라이언트 측 모델에 연결할 수있는 사용자 정의 표준을 만들 수 있습니다. 예를 들어 :이 개체에 대해 작동하지만이 목록에 올 때

{ 
    "todo": { 
    "_type": "Todo", 
    "title": "My todo", 
    ... 
    } 
} 

, 그것은 어색 가져옵니다이 사용자 정의 규칙을 만들기 전에

"items": { 
    "_type": "TodoItem", 
    "_value": [ 
    { "body": "first item." }, 
    { "body": "second item"} 
    ] 
} 

, 질문은 다음과 같습니다

  • 가 있습니까 응답 데이터에 클라이언트 측 유형 정보를 포함하는 데 필요한 RESTful 가이드 라인이 있습니까?

  • 그렇지 않은 경우 클라이언트 측 유형 정보를 응답 json에 포함시키는 것이 좋습니다.

  • 모델을 채우는 전체 접근 방식 외에 다른 대안은 무엇입니까? 모델 유형이 URL에서 검색 할 수 있지만

편집

, 예를 들어 /todo/user이 접근 방식의 문제는 N 모델의 초기 인구가 N HTTP 요청을 의미한다는 것이다.

대신 초기 요청은 요청이 하나 인 단일 큰 결합 트리에서 수행 할 수 있습니다. 이 경우 URL의 모델 유형 정보가 손실됩니다.

답변

0
  1. REST는 전송 된 콘텐츠와 아무 관련이 없습니다. 얼마나 에만 해당하므로 상태가 전달됩니다. JSON (사용중인 것으로 보이는 프로토콜)은 전송해야 할 것이 무엇인지 나타내는 것이고, 내가 아는 한 그렇게 지정하지는 않습니다.
  2. JSON 페이로드의 유형 정보를 포함하는 것은 실제로 사용중인 라이브러리에 따라 다릅니다. 유형을 포함시키기 위해 JSON을 사용하는 것이 더 쉬워지면 넣으라고 말하면됩니다.
2

각 REST 오브젝트마다 다른 엔드 포인트 (URL)가 사용됩니다. 그래서 url은 "어떤 모델"정보를 포함합니다.

각 모델은 고정 된 변수 및 고정 유형 모음입니다.

따라서 대개 동적 유형 정보를 전선을 통해 보낼 필요가 없습니다.

추가 올바른

ali-- @에서 주석 다시.하지만 이제는 좀 더 정확한 질문을하고 있습니다. "http 요청이 많이 발생하지 않고 백본 모델의 초기로드를 처리하려면 어떻게해야합니까?" 이 질문에 대한 최선의 대답이 확실하지 않습니다. 한 가지 방법은 여러 백본 모델을 다운로드하도록 백본에 알리는 것입니다.

이렇게하면 모델 당 하나의 호출과 모델 인스턴스 당 하나의 호출 수가 줄어 듭니다.

두 번째 방법은 서버에서 현재 데이터 트리를 다운로드하는 비 REST 호출/응답입니다. 이것은 좋은 생각입니다. 브라우저 - 클라이언트는 응답을 수신 한 다음 모델을 모델별로 백본에 제공 할 수 있습니다. 사용자에게 진행 상황에 대한 피드백을 제공하십시오.

Re : 중첩 모델. 여기에 SO q이 있습니다.

+0

좋은 점은이 방법의 문제점은 초기 큰 트리 인구입니다. 초기에 채울 수있는 10 가지 모델이있는 경우 10 개의 HTTP 요청을 보내지 않습니다. 각각을 채운다. 또한이 접근 방식을 사용하면 중첩 된 모델이 없음을 의미합니다. 이 방법으로 이러한 문제를 어떻게 처리합니까? – ali

+0

두 번째 방법은 원래 질문으로 돌아 가게합니다. '모델에 의해 모델을 제공'할 때, 어떤 데이터가 어떤 모델과 관련되어 있는지 어떻게 알 수 있습니까? – ali

+0

"트리 응답"은 각 모델에 대한 배열이있는 json obj입니다. 예를 들어, 속성 (각 배열)은 사용자, 게시물, 주석 등입니다. 사용자, 게시, 설명 모델의 컬렉션과 일치합니다. 배열 이름 (사용자)은 배열 요소가 사용자 모델임을 나타냅니다. 이 명명 스타일은 Rails에서 가져온 것으로, 잘 작동합니다. –

1

이미 다른 답변에서 말한 것처럼 REST에서 각 리소스는 자체 엔드 포인트를 가지고 있으므로 수행하려는 작업 (예 : 단일 엔드 포인트로 모든 모델 숨기기)은 완전히 REST와 호환되지 않습니다. IMHO. 그다지 큰 문제는 아닙니다.

중첩 된 컬렉션이 여기에 대한 답변 일 수 있습니다.

"래퍼"모음은 초기화시 단일 끝점에서 모든 모델을 가져와 각각의 모음으로 푸시합니다. 물론 json에서 유형 정보를 전송해야합니다.

그 시점부터 각 "내부"컬렉션은 자체 이벤트에 반응하고 자체 엔드 포인트를 처리합니다.

내가 알고있는 한 그러한 최적화에는 큰 문제가 없습니다.

+0

모든 모델을 하나의 단일 종단점에 연결하는 것이 RESTful이 아닌 이유는 무엇입니까? 단일 종점 자원 래퍼를 자원 자체로 생각할 수 있습니까? – ali

+0

나는 정확히 쓰고 있었지만, 조금 뒤틀려 느꼈다. :) 이론적 근거 : 애플리케이션에서 전체 상태 객체를 리소스로 조작하지 않고 단일 모델을 조작 할 것이고 이것들은 당신의 자원이다. 이제 나는 당신이 말하는 것은 무엇 이건간에 자원이라는 것을 동의 할 수 있습니다. D는 철학적으로 생각합니다. 나는 동의합니다 (POST 대 PUT 논쟁). –

0

다른 모델을 확장하는 모델을 만들 때 유용합니다. 구체적으로 어떤 모델을 사용하여 혼란을 없앨 지 나타냅니다.