0

我正在设计一个 Restful HTTP API 并且有一个设计问题。

在我的应用程序中,用户应该能够建议项目创建。

然后我可以批准或不批准它们。

我想知道最好的 VERB+URL 模式是什么。

示例 1:

POST|GET|PUT|DELETE /items

用户发布一个新项目,我可以将它从“待定”中放入“已批准”或删除它。

在这里,我必须使用 GET /items?status=approved 来获取所有已批准的项目,并使用 GET /items?status=pending 来获取所有待处理的项目。默认情况下,也许 GET /items 会让我得到所有批准的。

但我不明白如何阻止用户将其置于已批准状态。

或者

示例 2:

POST|GET|PUT|DELETE /item_creation_suggestions

用户发布一个新的项目建议,我可以通过 DELETE:ting 批准它并执行 POST /items 或只是删除它。

这里 /items 和 /item_creation_suggestions 是两个独立的集合。我只需要在批准时删除建议并创建项目。

这使得保护我的应用程序免受未经授权的访问变得简单。我可以通过授权保护我的 /items,而 /item_creation_suggestions 可以被任何人使用。

但这似乎不太安宁?

当用户建议项目更新和删除并且我批准或不批准它们时也是如此。

我是 Restful 设计的新手,因此我们将不胜感激所有反馈和建议!

4

2 回答 2

2

第一个听起来不错。

POST /items应该创建一个新项目并可能返回一个202 Accepted状态。
GET /items应退回所有批准的项目。
GET /items?status=pending应该将待处理的项目返回给具有正确权限的用户。
PUT /items/[id]带有指定新状态以更改状态的请求正文。
DELETE /items/[id]删除项目。

最后,您需要决定什么对您的API最有意义,但以上听起来通常是合理的。

于 2012-06-13T09:44:25.290 回答
1

我也非常喜欢第一个设置。

但我不明白如何阻止用户将其置于已批准状态。

如果用户无权执行此操作,您的应用程序逻辑需要阻止用户发布处于已批准状态的项目。REST 不仅仅是一个“死存储”,您实际上可以处理请求并抛出 403 Forbidden 以防用户做错了什么。

访问控制仍然很重要,并且不违背“宁静”。

于 2012-06-13T09:48:41.673 回答