关于 URL 设计的新手 Play 框架问题:我正在寻找更适合 Play 框架的习惯,尽管我认为这在某些方面可能是一个更一般的 URL 设计问题。
这些不是我的真实实体,但假设您有可以编辑的集合,例如:
GET /collections/:id controllers.Collections.edit(id: Long)
POST /collections/:id controllers.Collections.update(id: Long)
POST /collections/:id/delete controllers.Collections.delete(id: Long)
现在每个集合都可以有项目。这些项目在数据库中具有自己的 ID,但它们也具有带有外键约束的父集合的 ID。
所以我可以看到有这些:
GET /collections/:collection/items controllers.Items.list(collection: Long)
GET /collections/:collection/items/new controllers.Items.create(collection: Long)
POST /collections/:collection/items controllers.Items.save(collection: Long)
但是随后要编辑或删除已经存在的单个项目,因此我可以仅使用项目 ID 获取项目的集合 ID,我想要这个:
GET /items/:id controllers.Items.edit(id: Long)
POST /items/:id controllers.Items.update(id: Long)
POST /items/:id/delete controllers.Items.delete(id: Long)
还是我想做这样的事情?:
GET /collections/:collection/items/:id controllers.Items.edit(collection:Long, id: Long)
POST /collections/:collection/items/:id controllers.Items.update(collection:Long, id: Long)
POST /collections/:collection/items/:id/delete controllers.Items.delete(collection:Long, id: Long)
我想到的一个想法是如果我使用复合键(无论好坏)。我是否应该使用第二组来将接口与我只需要具有当前架构的项目 ID 的事实隔离开来?或者第二套完全是假的和浪费的?从理论上讲,它允许现有项目的 URL 具有错误的集合 ID(您可以检查,但仍然如此)。
(注意我会在上面使用更多的 RESTful PUT/DELETE,但我现在使用的是普通的 HTML 表单)
(对不起,如果这是一个常见问题解答,我真的找不到这样的东西)