我正在为网络设备制作一个管理系统(我们称这个系统为a)的rest接口,一切正常。a从另一个后端系统(我们称之为系统b)获取设备信息并将其索引到数据库中,然后每当客户机通过rest接口请求信息时,它将其作为json返回。
但是,有时客户需要通过向B请求来强制刷新某些设备信息(除了请求A刷新之外,客户不参与)。刷新单个节点的信息需要几秒钟的时间,因此该信息可能不应在请求它的同一请求中返回。目前,我们已经将此建模为使用POST /jobs
和一些数据创建“刷新信息”类型的作业。但这感觉太过复杂了,我们更希望像POST /equipment/<id>/refresh
这样的东西,但这感觉违背了“休息方式”?
除了上述乔布斯提到的解决方案,还有其他解决方案,但仍然遵循“休息方式”吗?
最佳答案
我将使用GET /equipment/<id>?since=<timestamp>
,其中since
参数是可选的。从语义上来说,这意味着:
从最后一次刷新设备时起(当未给出id
时),获取具有给定timestamp
的设备,或
使给定id
的设备在不早于给定timestamp
的情况下刷新
系统中的每个equipment
都有一个last_refreshed
时间戳。如果GET
,带有since=<timestamp>
参数的last_refreshed < since
将刷新设备,然后返回equipment
。
你的服务用户可以说GET /equipment/123?since=<15 minutes ago>
并确保他们总是得到不超过15分钟的信息。GET /equipment/123?since=<now>
表示“强制刷新”。
关于api - REST中的 Action 建模,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15815546/