根据这项服务获取有关酒店的信息:

> 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 的属性。

有帮助吗?

解决方案

别忘了,超媒体是你的朋友。

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. 每次都发送所有属性
  2. 根据要求单独发送属性( / {id} / a / {id} / b / {id} / biggie
  3. 根据您的建议,发送所有属性,除了不寻常的属性。
  4. 1和2很不错,因为它们是统一的,但是3在你的情况下是有意义的,或者在一个数据需要登录凭证的情况下,例如。

    (2还有一个缺点,就是要求与请求者更紧密地联系,他们必须知道每个属性的名称。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top