在REST中建模动作

时间:2013-04-04 15:32:21

标签: api http rest

我正在建立一个管理系统的REST接口(让我们称之为系统A)用于网络设备,我已经完成了所有工作。 A从另一个后端系统获取设备信息(让我们称之为系统B)并在数据库中对其进行索引,然后每当客户端通过REST接口请求信息时,它都将其作为JSON返回。

然而,有时客户需要通过从B请求来强制使A刷新一些设备信息(除了要求A刷新它之外没有客户端参与)。刷新单个节点的信息需要几秒钟,因此可能不会在与请求信息相同的请求中返回信息。目前我们已将此建模为使用POST /jobs创建“刷新信息”类型的作业和一些数据。但是这感觉非常过度,我们更喜欢像POST /equipment/<id>/refresh这样的东西,但这种感觉违背了“REST方式”?

除了上面提到的工作,还有其他解决办法,但是仍然遵循“REST方式”吗?

2 个答案:

答案 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一样,当您拥有CreateReadUpdateDelete时,REST中的POSTGETPUTDELETE(按顺序)。

也许在您的情况下,最佳网址是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