我怎么可能包括,利用JsonApi,链接到我的REST API方法?比如我有这样的事情:JsonApi方法调用
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
要激活并相应地停用客户。我的数据对象应该如何包含(或不包含)? specification不包含数据对象的“方法”部分。
我怎么可能包括,利用JsonApi,链接到我的REST API方法?比如我有这样的事情:JsonApi方法调用
POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate
要激活并相应地停用客户。我的数据对象应该如何包含(或不包含)? specification不包含数据对象的“方法”部分。
根据您的更改并基于guillaume31的回答进行更新。
如果它确实是一种更新的资源,那么你应该发出一个补丁: API/V1 /客户/ 1
并配有jsonapi顺应体更新的资源:
{
"data": {
"type": "customer",
"id": "1",
"attributes": {
"status": "deactivated"
}
}
}
如果意图是要真正删除资源,那么删除可能更合适。根据您的描述,PATCH可能是最佳路径,因为资源仍然存在,并且可能会根据其他呼叫进行恢复
通过将“停用”作为URI的一部分,您可以使停用资源,这似乎不正确。此IMO不符合REST level 1。
据我所知,激活/停用客户等于更新资源。 JsonApi建议发送PATCH请求以修改资源:http://jsonapi.org/format/#crud-updating
但是,它可能更忠实于REST,将激活建模为POST或PUT并将其停用为DELETE。您可以从PUT和DELETE的idempotency中受益 - 在连续两次激活或停用客户时,应该使其处于相同状态。但是这也取决于你的域名以及这些行为会带来什么后果。
在我知道的REST框架中,动词不包含在开箱即用的链接中。 JSON API either似乎不是这种情况。
是的,这不是一个RESTFUL的观点。我喜欢使用Post/Put和Delete来激活和停用。 – HeCtOr
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介绍的修补程序解决方案也是一种有效的方法,但implementing RESTful PATCH correctly要求变化与操作,数据指针和新的价值描述(也见JSON Patch RFC)。这对于这种简单的情况可能有点矫枉过正。
用于RESTful解决方案。这或多或少是我在回答中提到的。我可能更愿意使用不同的'/ prospect/1','/ customer/1'或'/ customers/inactive/1'资源和关联的POST/DELETE动词来反映不同的状态。 – guillaume31
我更新了我的问题来澄清一点,你认为你的解决方案可以适用于这种情况吗? – HeCtOr
我认为这是使用JsonApi的正确方法 – HeCtOr