如何命名使用两个标识符描述的RESTful端点?

时间:2014-03-05 21:15:31

标签: rest

当资源具有唯一标识符时,将检索它:

/building/{building_id}

但是如果使用building_idfloor_id参数描述“事件”资源会怎样。如何命名用于检索当前事件的RESTful端点?

准确地说,“event”资源具有唯一标识符(id)。 building_idfloor_id的组合应该在特定位置返回当前事件。

3 个答案:

答案 0 :(得分:3)

  

但是如果使用building_id和floor_id参数描述“event”资源会怎样。

是吗?我推荐这个:

如果

GET /events/{id}

返回一个事件和

GET /events

返回所有事件,然后

GET /events?building_id={building_id}&floor_id={floor_id}

返回building_idfloor_id组合的(可能只有一个)事件列表。

这看起来像经常使用的filter-or-search-a-collection-resource-pattern。

答案 1 :(得分:1)

除了Lutz的解决方案之外,万一你不希望他们成为query parameters
假设,从它看起来的名称,floor_id是building_id的一部分,所以如果事件资源被定义为两者的组合,它可以像

/event/{event_id}/building/{building_id}/floor/{floor_Id}

答案 2 :(得分:0)

我首先要考虑资源拥有什么。显然,建筑物拥有地板(敲打建筑物,地板被毁坏!)所以这是一个很好地映射到子资源的关系,但事件是否拥有建筑物或建筑物/楼层自己的事件?没有?然后我们通过链接来联系这些。 (一个楼层可能拥有当前事件概念作为它所拥有的东西,但这实际上是一个事件的链接,而不是事件本身。)

/building/{building_id}
/building/{building_id}/floor/{floor_id}
/building/{building_id}/floor/{floor_id}/current-event --redirect--> some event
/event/{event_id}

该活动可能应该包含与其所涉及的建筑物和楼层的超链接。换句话说,如果楼层没有当前事件,则获取…/current-event将导致404,如果 是事件,则303重定向将说明它是什么。 (您可能还想让地板的记录本身包含事件的真实链接,以及便利查找子资源。)

一个好的RESTful应用程序看起来很像一个密集链接的网站。使用链接和重定向的力量!