构建网站 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?
注意:这不是专门针对 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?