我正在建立一个管理系统的REST接口(让我们称之为系统A)用于网络设备,我已经完成了所有工作。 A从另一个后端系统获取设备信息(让我们称之为系统B)并在数据库中对其进行索引,然后每当客户端通过REST接口请求信息时,它都将其作为JSON返回。
然而,有时客户需要通过从B请求来强制使A刷新一些设备信息(除了要求A刷新它之外没有客户端参与)。刷新单个节点的信息需要几秒钟,因此可能不会在与请求信息相同的请求中返回信息。目前我们已将此建模为使用POST /jobs
创建“刷新信息”类型的作业和一些数据。但是这感觉非常过度,我们更喜欢像POST /equipment/<id>/refresh
这样的东西,但这种感觉违背了“REST方式”?
除了上面提到的工作,还有其他解决办法,但是仍然遵循“REST方式”吗?
答案 0 :(得分:1)
我会使用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>
表示“强制刷新。”
答案 1 :(得分:0)
请记住,Rest服务中的POST
表示您将创建一些对象。
要刷新一个对象或更新,建议使用PUT
方法。
与um CRUD一样,当您拥有Create
,Read
,Update
和Delete
时,REST中的POST
,GET
,PUT
,DELETE
(按顺序)。
也许在您的情况下,最佳网址是PUT
到/equipment/<id>
。
网址:
POST to /equipment/
:创建设备
GET to /equipment/<id>
:读取ID为<id>
PUT to /equipment/<id>
:更新ID为<id>
DELETE to /equipment/<id>
:删除ID为<id>
我希望能解决你的疑问。
无论如何,一个很好的参考是Apigee ebooks