편안한 방식으로“게으른 짐”방법은 무엇입니까?
-
06-07-2019 - |
문제
호텔에 대한 정보를 얻기 위해이 서비스가 주어진다 :
> GET /hotel/{id}
< HTTP/1.1 200 OK
< <hotel>
< <a>aaa</a>
< <b>aaa</b>
> <biggie>aaa....I am 300K</biggie >
< </hotel>
문제는 그게됩니다 biggie
300K이고 우리는 모든 응답으로 반환하고 싶지 않습니다. 이 값을 게으른로드하는 나머지 방법은 무엇입니까?
두 가지 리소스를 설정해야합니까?
> 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
.
해결책
잊지 마세요, 하이퍼 미디어는 당신의 친구입니다.
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>
다른 팁
두 가지 리소스로 설정하는 것이 효과가 있지만 마음에 들지 않으면 캐싱을 사용하는 것을 살펴볼 수 있습니다. 데이터의 특성에 따라 여러 리소스로 분할하는 것보다 실제로 더 많은 부하를 절약 할 수 있습니다.
솔루션이 괜찮다고 생각합니다. 완벽한 대답은 없지만 세 가지 가능성은 다음과 같습니다.
- 매번 모든 속성을 보내십시오
- 요청 된대로 개별적으로 속성을 보내십시오 (
/{id}/a
,/{id}/b
,/{id}/biggie
) - 당신이 제안한대로 특이한 속성을 제외한 모든 속성을 보내십시오.
1과 2는 균일하기 때문에 좋지만 3은 귀하의 경우 또는 한 조각의 데이터에 로그인 자격 증명이 필요한 경우에 의미가 있습니다.
(2는 또한 모든 속성의 이름을 알아야하는 요청자와 더 단단한 커플 링을 요구하는 단점이 있습니다.)
제휴하지 않습니다 StackOverflow