我正在为网络设备的管理系统(我们称之为系统 A)创建一个 REST 接口(interface),并且一切正常。 A 从另一个后端系统(让我们称这个系统为 B)获取设备信息并将其索引到数据库中,然后每当客户端通过 REST 接口(interface)请求信息时,它就会将其作为 JSON 返回。
但是有时客户端需要通过向B请求来强行让A刷新一些设备信息(除了要求A刷新之外客户端不参与)。刷新单个节点的信息需要几秒钟,因此信息可能不应该在请求它的同一请求中返回。目前我们将此建模为您使用 POST /jobs
创建“刷新信息”类型的作业。与一些数据。但这感觉非常过度设计,我们更愿意想要像 POST /equipment/<id>/refresh
这样的东西。但这感觉违背了“REST 方式”?
除了上面提到的工作之外,还有其他解决方案,但仍然遵循“REST 方式”吗?
最佳答案
我会使用 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 中的建模操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815546/