1

我正在为网络设备创建一个到管理系统(我们称之为系统 A)的 REST 接口,并且一切正常。A 从另一个后端系统(我们称之为系统 B)获取设备信息并将其索引到数据库中,然后每当客户端通过 REST 接口请求信息时,它都会以 JSON 形式返回。

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

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

4

2 回答 2

1

我会使用GET /equipment/<id>?since=<timestamp>,其中since参数是可选的。这在语义上意味着:

  • 获取带有给定的设备id,只要它碰巧最后一次刷新(当timestamp没有给定时),或者
  • 获取具有给定id刷新的设备不早于给定timestamp

您系统中的每个equipment都有一个last_refreshed时间戳。GETsince=<timestamp>参数会刷新设备 if然后last_refreshed < since返回equipment.

然后,您服务的用户可以说GET /equipment/123?since=<15 minutes ago>并确保他们始终获得不超过 15 分钟的信息。GET /equipment/123?since=<now>意思是“强制刷新”。

于 2013-04-07T18:48:42.117 回答
0

请记住,POST在 Rest 服务中意味着您将创建一些对象。

要刷新一个对象,或更新,建议使用该PUT方法。

就像 um CRUD 一样,当你有Create, Read, Update, and Delete, in REST 将是POST, GET, PUT, DELETE(按顺序)。

也许在您的情况下,最好的 URL 是PUTto /equipment/<id>

网址:

POST to /equipment/: 创建设备

GET to /equipment/<id>: 用 id 读取设备<id>

PUT to /equipment/<id>: 用 id 更新设备<id>

DELETE to /equipment/<id>: 删除 id 的设备<id>

希望能解决你的疑惑。

无论如何,一个很好的参考是Apigee 电子书

于 2013-04-04T19:30:26.720 回答