2017-02-28 52 views
0

在我的快车应用程序中,用户可以创建一个配置文件,这样做可以选择一个'CustomUrl',用于生成URL他们的档案(例如:http://www.myapp.com/profile/customUrl)。还可以查看配置文件,其端点可能如下所示:使用用户创建的自定义路径设计快速API与其他api端点冲突

router.get('/ reviews',...)和router.post('/ reviews/new',...)

用于读取配置文件中的API端点低于:

router.get( '/:customUrl',...)

虽然我不认为用户会选择像“审查的customUrl ',这是可能的,因此,我的API端点获取他们的配置文件将被路由拦截以获得'/评论'。

我有一些想法,但我通常是Express的新手,并不确定是否有一种方法比另一种更好。这里有一些:

1)我可以把任何端点与customUrl路径上方的其他端点。这听起来并不可接受,因为customUrl路径会拦截任何意图用于“/ reviews”的请求。

2)我可以验证customUrl,它不仅是唯一的,而且不是现有的终点。这看起来并不令人满意,因为它不能很好地扩展(每次添加新的端点时都必须更新黑名单)。如果用户选择了一个我以后想用于另一个端点的customUrl,那也是有问题的。

3)单独审查的个人资料和自己的路线。这可能是最好的解决方案,虽然它会呈现我希望避免的大量工作(在'/ profiles'下还有其他子路径名称间隔)。 4)把router.get('/ reviews'...)放在customUrl上面,但是如果没有req.query('sortBy = dateCreate'等),则调用next()。

5)我之前没有提到过,因为它感觉我只是隐藏了问题而不是修复它,但是我的客户端在React中是在一个单独的端口上,所以我可以配置路由器将URL显示为.com/profile /:customUrl,但将API端点更改为如下形式:router.get('/',...),其中queryString为'?customUrl = ...'或其他像那样。然后url将是'www.myApp.com/profile/:customUrl',但获取请求将会是'api.myApp.com/profile/?customUrl=:customUrl',并且对于评论的获取请求将是'api .myApp.com /个人资料/评论'(或类似的东西)。

无论如何,我有一种感觉,我错过了一些非常基础的东西。任何帮助将是伟大的!

回答

0

你可能只是需要REST风格与路线的命名,例如:

  • 歌厅简介:

router.get('/profile/:customUrl', ...)

  • 得到评论的轮廓

router.get('/profile/:customUrl/reviews', ...)

  • 发布一个新的审查(注意你不需要,说:“新的”,因为这可以通过将其作为一个POST请求来确定的路线)

router.post('/profile/:customUrl/reviews',...)

你应该使用下面的动词而如果你正在真正的RESTful列出的理由:

  • GET - 获取记录
  • POST - 添加记录
  • PUT - 编辑记录
  • 补丁 - 执行部分编辑(例如,不发送整个文件)
  • 删除 - 删除记录
+0

我明白了。我一直使用.post来覆盖'post'更新和删除请求,但是我使用axios来进行AJAX调用,支持修补和删除,就像表达路由器一样,所以我会将这些端点改为反映这一点。在我使用终点来获取所有评论(而不仅仅是特定个人档案的评论)的情况下,我应该将评论从/ profile /中分出来并制作一个单独的路线吗?所有评论必须在发布之前获得批准,因此,有一个页面可以获得所有评论的状态为“待审核”。现在,这个终点是router.get('/ profile/reviews',...)。 –

+0

请参阅我的编辑上面的动词列表以及您应该如何使用它们的 – Varedis

+0

非常感谢。我已经提出了你的答案,但是因为我是新手,并且声望低于15,所以它不显示。我还编辑了关于简介的评论(见最后一句)。对此有何想法? –