2017-09-11 74 views
1

在我的系统中我有两个资源packagesdebts,packages可以包含多个debts。现在我准备API来删除packages资源,但我需要有两种方法可供选择:如何在我想删除资源和子资源或只是资源时正确地创建rest api端点?

  • 删除packages及相关debts - 毕竟这个动作被删除的资源将在系统中不可见,

这里,我,想简单router.delete('/packages/:token')

  • 删除packages但取消固定相关debts - 这个动作packages瓦特后生病将被删除,但debts将被更新为与已删除软件包的连接松动,并且debts将在系统中用于其他操作。

在这里,我有问题,我想创建post端点与路径的动作,像,router.post('/packages/:token/remove/unpin')的。但它可能不是最好的休息API。

我希望,这很清楚。感谢您的任何帮助/建议。

回答

0

所以阅读本好贴http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api后,我决定这样router.delete('/packages/:token/unpin')创建端点,这会告诉我需要删除包,但unpin行动会给我一个提示,我需要取消固定债务前删除软件包。

在提后有不错的部分我的问题:

什么不适合CRUD操作的世界行动?

这是事情变得模糊的地方。有许多方法:

  1. 重组的动作看起来像一个资源的领域。如果该操作不带参数,这将起作用。例如,激活动作可以映射到布尔激活字段,并通过PATCH更新到资源。
  2. 将其视为具有RESTful原则的子资源。例如,GitHub的API可让您用PUT /gists/:id/star和unstar与DELETE /gists/:id/star一起呈现主题。
  3. 有时你真的无法将动作映射到合理的RESTful结构。例如,多资源搜索对于应用于特定资源的端点没有意义。在这种情况下,即使它不是资源,/search也是最有意义的。这没什么 - 只要从API消费者的角度做正确的事情,并确保它清楚记录以避免混淆。