我正在使用jsonapi资源gem为类似购物车的东西构建一个API,并且我需要一个端点来从购物车中删除项目。
目前,我假设使用此 API 的客户端不需要实际的"购物车项目"。相反,它只需要购物车中的产品列表。
但是,似乎没有任何方法可以在不知道 jsonapi 资源 ID 的情况下删除该内容,即客户端在不知道连接模型 id 的情况下无法从购物车中删除某些内容。
基本上,我需要一个执行以下操作的端点:
DELETE http://example.com/carts/1/cart-items?filter[product]=1
相反,我能找到的唯一选择是
DELETE http://example.com/cart-items/1
或者,我可以实现一个自定义操作来处理这个问题,但是我已经浏览了文档,找不到编写自定义操作的规定方法。
在为此挣扎了几个小时之后,在写这个问题的过程中,我终于找到了答案。不过,它根本没有很好的记录——我不得不通读宝石的测试才能弄清楚。
curl -X DELETE -H "Content-Type: application/vnd.api+json"
--data '{ "data" : [{"type": "products", "id": 185 }] }' http://localhost:3000/api/v1/carts/4085/relationships/products
这成功地从购物车中删除了该项目(并且没有触及产品记录本身(。