根据这项服务获取有关酒店的信息:
> 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
的属性。
答案 0 :(得分:13)
别忘了,超媒体是你的朋友。
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>
答案 1 :(得分:3)
将其设置为两个资源可行,但如果您不喜欢,可以考虑使用缓存;根据数据的性质,这实际上可能比分割成多个资源节省更多的负担。
答案 2 :(得分:1)
我认为您的解决方案很好。没有完美的答案,但有三种可能性:
/{id}/a
,/{id}/b
,/{id}/biggie
)1和2很不错,因为它们是统一的,但是3在你的情况下是有意义的,或者在一个数据需要登录凭证的情况下,例如。
(2还有一个缺点,就是要求与请求者更紧密地联系,他们必须知道每个属性的名称。)