JsonApi方法调用

时间:2015-09-21 15:47:18

标签: rest domain-driven-design json-api

我如何使用JsonApi包含我的Rest API中的方法的链接?,例如我有类似的东西:

POST api/v1/customer/1/deactivate
POST api/v1/customer/1/activate

相应地激活和停用客户。它们应该如何包含(或不包含在)数据对象中? specification不包含数据对象的“方法”部分。

3 个答案:

答案 0 :(得分:2)

根据您的更改并根据guillaume31的答案进行更新。

如果它确实是对资源的更新,那么您应该发出PATCH:     API / V1 /客户/ 1

使用符合jsonapi标准的机构来更新资源:

{
  "data": {
    "type": "customer",
    "id": "1",
    "attributes": {
        "status": "deactivated"
    }
  }
}

如果意图是真正删除资源,那么删除可能更合适。根据您的描述,PATCH可能是最佳路径,因为资源仍然存在,可以根据其他呼叫进行恢复

答案 1 :(得分:1)

  

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解决方案也是一种有效的方法,但implementing RESTful PATCH correctly要求使用操作,数据指针和新值来描述更改(另请参阅{{3 }})。对于这个简单的场景,这可能有点过头了。

答案 2 :(得分:0)

通过将“deactivate”作为URI的一部分包含在内,您可以使资源停用,这似乎是不正确的。此IMO不符合REST level 1

据我了解,激活/停用客户相当于更新资源。 JsonApi建议发送修改资源的PATCH请求:http://jsonapi.org/format/#crud-updating

然而,REST可能更忠实于将激活模型化为POST或PUT并将其停用为DELETE。您将受益于PUT和DELETE的idempotency - 连续两次激活或停用客户可能会使其处于相同状态。但这也取决于您的域名以及这些行为的后果。

在我知道的REST框架中,动词不包含在开箱即用的链接中。我似乎不是JSON API either的情况。