在我的系统中,我有两个资源packages
和debts
,packages
可以包含多个debts
。现在我准备api删除packages
资源,但我需要有两个选项:
packages
及相关debts
- 此操作后,系统中将无法显示已删除的资源,在这里,我想到了简单的router.delete('/packages/:token')
packages
但取消固定相关debts
- 此操作后packages
将被删除,但debts
将更新为与已删除包的宽松连接,{{1}将在系统中用于其他操作。我遇到问题,我想到在路径中创建debts
端点,例如post
。但它可能不是最好的休息api。
我希望,这很清楚。感谢您提供任何帮助/建议。
答案 0 :(得分:0)
所以在阅读了这篇不错的帖子http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api后,我决定创建像router.delete('/packages/:token/unpin')
这样的端点,这会告诉我需要删除包,但是unpin
动作会给我一个提示我需要在删除包之前取消债务。
在提及帖子中,我的问题有很好的部分:
那些不适合CRUD操作世界的行为呢?
这是事情变得模糊的地方。有很多方法:
- 将操作重组为显示为资源字段。如果操作不采用参数,则此方法有效。例如,激活动作可以映射到布尔激活的字段,并通过PATCH更新到资源。
- 将其视为具有RESTful原则的子资源。例如,GitHub的API可让您使用
PUT /gists/:id/star
和使用DELETE /gists/:id/star
的unstar加注主题。- 有时你真的无法将动作映射到合理的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使用者的角度做正确的事情,并确保明确记录以避免混淆。