如何使用 JsonApi 在我的 Rest API 中包含指向方法的链接?例如,我有这样的东西:
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
相应地激活和停用客户。它们应该如何包含(或不包含)在我的数据对象中?该规范不包括数据对象的“方法”部分。
如何使用 JsonApi 在我的 Rest API 中包含指向方法的链接?例如,我有这样的东西:
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
相应地激活和停用客户。它们应该如何包含(或不包含)在我的数据对象中?该规范不包括数据对象的“方法”部分。
根据您的更改和 guillaume31 的回答进行更新。
如果它确实是对资源的更新,那么您应该发出 PATCH 到:api/v1/customer/1
并使用符合 jsonapi 的主体来更新资源:
{
"data": {
"type": "customer",
"id": "1",
"attributes": {
"status": "deactivated"
}
}
}
如果意图是真正删除资源,那么删除可能更合适。根据您的描述,PATCH 可能是最佳路径,因为资源仍然存在并且可以根据其他调用恢复
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
这不是 RESTful。但是客户的“活跃”状态可以看作是一种资源!所以最简单的解决方案如下:
PUT api/v1/customer/1/active # Activates customer 1
DELETE api/v1/customer/1/active # Deactivates customer 1
@guillaume31 描述的 PATCH 解决方案也是一种有效的方法,但正确实施 RESTful PATCH需要使用操作、数据指针和新值来描述更改(另请参阅JSON Patch RFC)。对于这个简单的场景,这可能是矫枉过正。
通过将“deactivate”作为 URI 的一部分包含在内,您有点像是在停用资源,这似乎是不正确的。此 IMO 不符合REST 级别 1。
据我了解,激活/停用客户相当于更新资源。JsonApi 建议发送 PATCH 请求来修改资源:http: //jsonapi.org/format/#crud-updating
但是,将激活建模为 POST 或 PUT 并将停用建模为 DELETE 可能更忠实于 REST。您将受益于 PUT 和 DELETE 的幂等性- 连续两次激活或停用客户可能会使它保持相同的状态。但这也取决于您的域以及这些操作会产生什么后果。
在我知道的 REST 框架中,动词不包含在开箱即用的链接中。我似乎也不是 JSON API 的情况。