当我想删除资源和子资源或只是资源时,如何正确地建立rest api端点?

时间:2017-09-11 15:30:31

标签: rest

在我的系统中,我有两个资源packagesdebtspackages可以包含多个debts。现在我准备api删除packages资源,但我需要有两个选项:

  • 删除packages及相关debts - 此操作后,系统中将无法显示已删除的资源,

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

  • 删除packages但取消固定相关debts - 此操作后packages将被删除,但debts将更新为与已删除包的宽松连接,{{1}将在系统中用于其他操作。

我遇到问题,我想到在路径中创建debts端点,例如post。但它可能不是最好的休息api。

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

1 个答案:

答案 0 :(得分:0)

所以在阅读了这篇不错的帖子http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api后,我决定创建像router.delete('/packages/:token/unpin')这样的端点,这会告诉我需要删除包,但是unpin动作会给我一个提示我需要在删除包之前取消债务。

在提及帖子中,我的问题有很好的部分:

  

那些不适合CRUD操作世界的行为呢?

     

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

     
      
  1. 将操作重组为显示为资源字段。如果操作不采用参数,则此方法有效。例如,激活动作可以映射到布尔激活的字段,并通过PATCH更新到资源。
  2.   
  3. 将其视为具有RESTful原则的子资源。例如,GitHub的API可让您使用PUT /gists/:id/star和使用DELETE /gists/:id/star的unstar加注主题。
  4.   
  5. 有时你真的无法将动作映射到合理的RESTful结构。例如,多资源搜索实际上没有意义应用于特定资源的端点。在这种情况下,即使/search不是资源,12.399999999999999 3.7333333333333334 22.13333333333334 34.93333333333333 13.600000000000001 10.133333333333333 94.26666666666667 26. 25.333333333333336 8.666666666666666 52. 38. 25.33333333333333 51.733333333333334 24.799999999999997 37.333333333333336 77.33333333333333 5.466666666666667 13.2 7.733333333333333 33.46666666666667 4.666666666666667 33.86666666666666 46. 52.8 3.466666666666667 24.400000000000002 20.933333333333334 54.53333333333334 27.6 121.73333333333335 30.133333333333333 103.73333333333333 13.466666666666667 47.599999999999994 5.333333333333333 ........... 也会最有意义。这没关系 - 从API使用者的角度做正确的事情,并确保明确记录以避免混淆。
  6.