用于即时计算的资源的REST API(尚不存在)

问题描述 投票:0回答:2

(业余爱好编码器请耐心等待)

我试着寻找这个,但找不到让我困惑的模式或答案,因为这一定是一个常见的问题?

我正在写一个简单的股票估值服务。我的API采用Stock符号,例如“stockdata / GOOG”并返回一些计算的统计数据。当然,基础股票数据经常变化,因此我需要不时地重新计算。我正在努力研究如何优雅地处理2件事

1)用户请求库存我的服务还没有看到:鉴于有10000个证券,对它们进行预先计算似乎是不合理或不必要的。 REST明智这让我感到困惑,但据我所知,如果我没有数据,我真的应该返回404。问题是,假设股票有效,我能够获取基础数据并计算我自己的分数。我该怎么做?目前,我确实刷新了副作用,但这看起来很讨厌。想到的唯一其他REST方法是要求用户对符号进行PUT / POST(无数据),这可能会触发我创建/计算。它让我觉得奇怪,因为我看到的所有例子都包括这些提供大量额外数据来呈现该资源的方法。 (我需要的只是符号本身,我的服务可以完成其余的工作。即GET包含我计算/创建资源所需的所有信息)

2)刷新状态:随着数据的变化我想要重新计算,但每天最多一次,否则我会不必要地锤击源服务器。与上面一样,我应该如何触发刷新?目前,我的GET检查货币并更新它是否超过一天,但再次看起来不是RESTy。我应该只返回陈旧数据并再次将其留给用户再拨打一个电话来请求更新吗?这是补丁的一个很好的用例吗?

你推荐我的这些POST / PUT / PATCH的有效载荷应该是什么样的?

谢谢,Sev

rest api-design
2个回答
0
投票

您将“我没有缓存数据”与“没有数据”混淆。客户端并不真正创建或更新数据,他们希望获得最新版本。 GET应该可以正常工作。如果你作为提供者需要做一些工作才能返回最新版本然后很好,它仍然是一个GET。

这同样适用于更新。用户需要当前版本的数据,因此他们应该使用GET。如果数据发生变化,那么他们将获得新版本,否则他们将获得旧版本。普通网页以相同的方式工作,Web服务器返回当前版本,有时数据也会发生变化。

如果您知道何时更改数据,最好返回带有max-age的Cache-Control标头或使用Expires标头或两者。这样客户就知道他们可以缓存旧数据,但不是永远。


0
投票

问题是,假设股票有效,我能够获取基础数据并计算我自己的分数。我该怎么做?目前,我确实刷新了副作用,但这看起来很讨厌

将此视为GET,其实现对其自己的缓存有副作用,这很好。这是菲尔丁在2002年支持这一职位。

HTTP不会尝试要求GET的结果是安全的。它的作用是要求操作的语义是安全的,因此它是实现的错误,而不是接口或接口的用户,如果发生任何导致财产损失的结果(金钱,BTW,为了这个定义,它被认为是财产。

您希望执行一系列副作用(读取某些状态,可能更新本地缓存)这一事实是一个实现细节,而不是客户端感兴趣的。

由于数据一直在变化,我想重新计算,但每天最多一次,否则我会不必要地锤击源服务器。与上面一样,我应该如何触发刷新?目前,我的GET检查货币并更新它是否超过一天,但再次看起来不是RESTy。

您要问的问题是:您的实施应如何管理其缓存?答案几乎是“你想要的任何方式”。存储最近计算结果的年龄并重新使用它是一件非常正常的事情。无论您是返回缓存表示还是新计算表示,都不是客户关注的问题。

您不问的一个问题:如果您每天只刷新一次本地副本,那么客户端检查更新的次数并不是很多。 HTTP标准包括caching semantics,为您提供了一种向客户端传达新鲜/失效语义的标准方法。

© www.soinside.com 2019 - 2024. All rights reserved.