2009-10-26 3 views
3

이 호텔에 대한 정보를 얻기 위해이 서비스를 감안할 때 :RESTful 방식으로 "게으른로드"하는 방법?

> GET /hotel/{id} 

< HTTP/1.1 200 OK 
< <hotel> 
< <a>aaa</a> 
< <b>aaa</b> 
> <biggie>aaa....I am 300K</biggie > 
< </hotel> 

문제 biggie는 300K이며 우리는 모든 응답을 반환하지 않는다는 것입니다. 이 값을 게으른로드하는 RESTful 방법은 무엇입니까?

우리는이 자원을 설정해야 :

> GET /hotel/{id} 

< HTTP/1.1 200 OK 
< <hotel> 
< <a>aaa</a> 
< <b>aaa</b> 
< </hotel> 

와 ..

> GET /hotel/{id}/biggie 

< HTTP/1.1 200 OK 
< <biggie> 
< <val>aaa....I am 300K</val> 
< </biggie> 

을 그리고 당신이 정말로 데이터 것을 필요로 할 때 당신은 단지 GET /hotel/{id}/biggie을 요청?

큰 데이터 세트라는 점을 제외하면 biggie에 대해서는 특별한 것이 없지만 작동합니다. 나는 모든 속성이 실제로 단지 hotel의 속성이기 때문에 모든 것을 hotel 레벨로 유지하는 것이 더 좋다고 생각합니다.

답변

12

는, 하이퍼 미디어가 당신의 친구입니다.

GET /hotel/{id} 

HTTP/1.1 200 OK 
<hotel Id="99"> 
    <a>aaa</a> 
    <b>aaa</b> 
    <biggieLink href="/Hotel/99/Biggie"/> 
</hotel> 

또는 심지어

GET /hotel/{id} 

HTTP/1.1 200 OK 
<hotel Id="99"> 
    <a>aaa</a> 
    <b>aaa</b> 
    <biggieSynopsis href="/Hotel/99/Biggie"> 
    <title>Here is a a summary of biggie</title> 
    </biggieSynopsis 
</hotel> 
3

두 가지 리소스로 설정하면 효과가 있지만, 마음에 들지 않으면 캐싱을 사용할 수 있습니다. 데이터의 특성에 따라 여러 리소스로 분할하는 것보다 실제로로드가 더 많이 절약 될 수 있습니다.

+0

캐싱을 할 수 내가 생각하지 않은 또 다른 가능성이다. 좋은 생각. –

1

나는 해결책이 잘되었다고 생각합니다. 이 완벽한 답은 없지만 세 가지 가능성은 다음과 같습니다

  1. 보내기 모든 속성 (/{id}/a, /{id}/b, /{id}/biggie)
  2. 당신 같이 특별한 사람을위한 경우를 제외하고 모든 속성을 보내기의 요청에 따라
  3. 보내기 개별적 속성마다 제안해라.

1과 2는 균일하므로 3 가지 경우에 적합합니다. 예를 들어 하나의 데이터에 로그인 자격 증명이 필요한 경우입니다.

(2는 또한 모든 속성의 이름을 알고있다 요청자와 긴밀한 결합을 요구하는 단점이있다.) 잊지 마세요