构建网站 Parent/Child 视图的正确 RESTful 方法是什么

What's the correct RESTful way to structure A Website's Parent/Child Views

注意:这不是专门针对 API。

我有三个实体:Building Unit Person

这些是纯粹简单的简单排他性 1:M 关系

一个Person只能住(1)个单位 A Unit 只能存在于 (1) 单元 Building 本质上是父级。

我应该有这样的 URL:

查看模式非常简单

/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 这样的路线还是有一些其他标准约定?

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

我认为您的问题可能会吸引一些固执己见的答案,但最好听听其他人在 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?