Restful HTTP API模式

时间:2012-06-13 09:30:21

标签: http rest

我正在设计Restful HTTP API并遇到设计问题。

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

然后我可以批准或反对他们。

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

示例1:

POST|GET|PUT|DELETE /items

用户POST一个新项目,我可以将其从“待处理”中删除为“已批准”或删除它。

在这里,我必须使用GET / items?status = approved来获取所有已批准的项目和GET / items?status = pending以获取所有待处理项目。也许GET / items会默认为我提供所有批准的。

但我不知道如何防止用户将其置于批准状态。

示例2:

POST|GET|PUT|DELETE /item_creation_suggestions

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

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

这样可以很容易地保护我的应用免受未经授权的访问。我可以使用授权保护我的/项目,而/ item_creation_suggestions可以被任何人使用。

但这似乎不太安静?

当用户建议更新和删除项目时,同样适用,我会批准或拒绝他们。

我在Restful设计方面非常新,所以所有反馈和建议都会受到赞赏!

2 个答案:

答案 0 :(得分:2)

第一个听起来不错。

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

最后,您需要确定哪些内容对您的 API最有意义,但上述声音通常合理。

答案 1 :(得分:1)

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

  

但我不知道如何防止用户将其置于批准状态。

如果您的应用程序逻辑无权执行此操作,则需要阻止用户使用已批准状态POST项目。 REST不仅仅是一个“死存储”,你实际上可以处理请求并在用户做错的情况下抛出403 Forbidden。

访问控制仍然很重要,并不违反“安宁”。