问题描述
在涉及非常具体的行为时,我一直对 RESTful 路由命名约定感到困惑。
假设我有一个带有前端应用程序和 API 的应用程序,我希望管理员能够禁用帐户(或将其禁用几天)。它的路线应该是什么?我应该将以下对象作为主体放入 /user/{id}
吗:
{
// Other user parameters
"enabled": false
}
或者我应该有一个带有动词的特定路线,例如/user/{id}/disable
?
解决方法
编辑应该转到与看到更改的 GET 相同的目标 URI。
所以如果您的管理员正在使用
GET /user/12345
要读取启用的字段,那么他们应该使用其中之一
PUT /user/12345
POST /user/12345
PATCH /user/12345
改变它。
这里的动机是缓存,特别是 HTTP cache-invalidation。
在涉及非常具体的行为时,我一直对 RESTful 路由命名约定感到困惑。
诀窍是认识到我们不使用名称来表示行为,而是将名称用于资源,我们认为这是对文档的概括。如果我们想将信息发送到服务器,我们可以通过编辑该服务器上托管的文档之一的表示来实现。
您必须学习如何将 HTTP 缩小到域应用程序协议中.... -- Jim Webber 2011