特殊的 RESTful 路由

问题描述

在涉及非常具体的行为时,我一直对 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...