什么是构建网站的父/子视图的正确RESTful方式

时间:2016-01-08 03:54:11

标签: rest url-routing parent-child hierarchy

注意:这不是专门用于API。

我有三个实体:Building Unit Person

这些是纯粹简单的独家1:M关系

Person只能住在(1)单位 Unit只能存在于(1)单元中 Building基本上是父母。

我应该有以下网址:

查看模式非常简单

/buildings                        //Show all buildings
/buildings/[id]                   //Show one building
/buildings/[id]/units             //Show all units in a building
/buildings/[id]/units/[id]/people //Show all people in a unit

然而,这似乎有点冗长。虽然这些URL可能适用于重定向到GET的PUTS和POSTS,但如果我想显示建筑物中的所有单元和人员,我应该使用类似buildings/[id]/details的路由还是有其他标准惯例?< / p>

此外,当我想显示一个表单来编辑值时,是否有一个标准的url路径,如buildings/[id]/edit POST和PUT在这种情况下将基本上使用相同的形式(但PUT具有填写的字段。)

1 个答案:

答案 0 :(得分:1)

我认为你的问题可能会吸引一些自以为是的答案,但听到其他人的意见是很好的。关于RESTful API设计的实践。

你说你的路径看起来很冗长,如果你的ID是自动递增的整数,你可能会有这样的感觉,而指定建筑物,单位等的唯一方法是使用

这样的路径
buildings/1/units/4/tenants
buildings/1/units/4/tenants/5

对我来说,这些都是明确的界面。如果我必须维护您的代码,我认为这里发生的事情非常明显。如果我不得不批评某些事情,我会说你似乎正在以一种允许全部或一种选择的方式发展。不过,这是你的设计选择。也许这就是你在这种情况下所需要的。以下是一些可以想到的例子。

更新一个租户

PUT buildings/1/units/4/tenants/2

创建三个单元

POST buildings/2/units                 //carries message body for SQL in back end

阅读具有特定条件的租户

GET buildings/1/tenants?params=        //GET can't carry a message body

删除具有特定条件的租户

DELETE buildings/5/tenants?criteria=   //params needed?