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