特殊 RESTful 路线

Special RESTful routes

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


I've always been confused with RESTful routes naming conventions when it comes to very specific behaviors.

诀窍是认识到我们不为行为使用名称,我们将它们用于资源,我们将其视为 文档 的概括。如果我们想将信息发送到服务器,我们可以通过编辑该服务器上托管的其中一个文档的表示来实现。

You have to learn how to narrow HTTP into a domain application protocol.... -- Jim Webber 2011