我正在设计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设计方面非常新,所以所有反馈和建议都会受到赞赏!
答案 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。
访问控制仍然很重要,并不违反“安宁”。