我使用的系统要求审核每个更改并为每个更改指定原因。在努力保持良好的REST设计时,我们希望正确使用HTTP动词。
关于这个特殊情况,我不确定处理这种情况的最佳方法。让我们说我们有一个简单的实体:
URL: /users/100
JSON: { username: 'usr1', firstName: 'John', lastName: 'Smith' }
现在,如果我想更新' usr1'对于' user1',我们的系统要求我指定更改的原因。
如果没有更改原因要求,我们可以轻松地将JSON保存到URL。
我的问题是将更改原因发送到服务器的最佳方法是什么。以下是我到目前为止提出的选项:
这些选项对我来说都不合适。有没有人以前处理过这个问题?
答案 0 :(得分:1)
首先,对您提出的解决方案有一些想法:
changeReason
添加到JSON
对象:不好,因为(如果使用相同的mime-type
)GET
则不需要该字段。因此,当然这些信息应该是请求表示的一部分,并且更新发生在用户身上,因此URL不应该更改(它是相同的资源)。我提出了PATCH方法,这个方法似乎是为了你描述的确切目的而创建的。
使用PATCH
方法,您必须描述“更改”表示,该表示专门描述您要应用于资源的更改。此文档格式将与任何资源格式不同,然后可以包含“changeReason”。看起来像这样:
PATCH /users/100
Content-Type: application/vnd.company.auditedchange+json
{
"replaceFields": {
"username": "user1"
}
"changeReason": "Typo in username."
}
答案 1 :(得分:0)
引入新资源userchange
。 POST
以及有关变更的信息。
POST /userchange
Content-Type: application/json
{
"id": 100,
"changes": {
"username": "user1"
},
"reason": "fixed name"
}
服务器将对用户执行更改并记录原因。