使用RESTful API设计删除FK

时间:2018-05-16 14:04:41

标签: rest

我有一个名为itemlink的表,其中包含三列idparentIdchildId

根据this article,如果我想获取所有项链接,那么我会调用GET /itemlink,如果我想获取属于特定父项的所有项链接,那么我将添加一个查询字符串GET /itemlink?parentId=5并且该参数是可选的

但是,如果我正在处理删除,并且我想让客户端能够删除属于特定父级的所有项链接,我觉得有一个会删除所有项链接的网址{{1} },这听起来不是最好(或安全)的做法,那么实现这个的最佳方式是什么?

在我要求删除时,我可以想到强制客户端在parentId中添加的一个选项是有一个像DEL /itemlink这样的结束点但是这会破坏正确REST设计的规则吗?

1 个答案:

答案 0 :(得分:1)

资源&您的案例中涉及子资源。即亲子关系。 IMO,关系(itemlink)不应该作为REST API中的资源公开,这实际上是您案例中的一个令人困惑的地方。

我将使用与您类似的示例用例来解释这一点。

Customers - Parent table 
Orders - Child table
LinkId - CustomerId - OrderId - Link table

在这种情况下,apis必须像

/customers/$customer_id/orders - (GET) - Get all orders of the customer
/customers/$customer_id/orders/$order_id - (GET) - Get a particular order of the customer
/customers/$customer_id/orders - (POST) - Create a new order for the customer
/customers/$customer_id/orders/$order_id - (PUT) - Edit a particular order of the customer
/customers/$customer_id/orders/$order_id - (DELETE) - Delete all the orders of the customer

要删除FK关系,当客户关闭其帐户时,应删除所有订单,这将通过/customers/$customer_id - HTTP DELETE

进行