Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用与其他API端点冲突的用户创建的自定义路径设计express API_Node.js_Api_Reactjs_Express - Fatal编程技术网

Node.js 使用与其他API端点冲突的用户创建的自定义路径设计express API

Node.js 使用与其他API端点冲突的用户创建的自定义路径设计express API,node.js,api,reactjs,express,Node.js,Api,Reactjs,Express,在my express应用程序中,用户可以创建一个配置文件,并在此过程中选择一个“CustomUrl”,用于为其配置文件生成url(示例:)。还可以查看配置文件,其端点可能如下所示: router.get('/reviews', ...) and router.post('/reviews/new',...) 用于获取配置文件的API端点如下所示: router.get('/:customUrl',...) 虽然我不认为用户会选择像“reviews”这样的自定义URL,但这是可能的,因此,获

在my express应用程序中,用户可以创建一个配置文件,并在此过程中选择一个“CustomUrl”,用于为其配置文件生成url(示例:)。还可以查看配置文件,其端点可能如下所示:

router.get('/reviews', ...) and router.post('/reviews/new',...)
用于获取配置文件的API端点如下所示:

router.get('/:customUrl',...)
虽然我不认为用户会选择像“reviews”这样的自定义URL,但这是可能的,因此,获取其配置文件的API端点将被获取“/reviews”的路由截获

我有一些想法,但我通常是新的表达方式,不确定一种方式是否比另一种好。以下是其中一些:

1) 我可以将任何具有自定义URL路径的端点置于其他端点之上。这听起来不可接受,因为customUrl路径将拦截任何用于“/reviews”等的请求

2) 我可以验证customUrl,它不仅是唯一的,而且不是现有的端点。这似乎并不令人满意,因为它的伸缩性不好(每次添加新的端点时都必须更新黑名单)。如果一个用户选择了一个customUrl,我以后想用它作为另一个端点,这也会有问题

3) 将审查从概要文件中分离出来并纳入其自己的路线。这可能是最好的解决方案,尽管这会带来我希望避免的大量工作(在“/profiles”下还有其他子路由名称)

4) 将router.get(“/reviews”…)放在customUrl上方,但如果没有req.query(“?sortBy=dateCreate”等),则调用next()

5) 我之前没有提到这一点,因为我觉得我只是在隐藏问题,而不是解决问题,但是我的客户端在一个单独的端口上,因此我可以将路由器配置为将url显示为.com/profile/:customUrl,但将API端点改为:router.get(“/”,…)使用“?customUrl=…”之类的查询字符串。然后url将是“
www.myApp.com/profile/:customUrl
”,但get请求将是“
api.myApp.com/profile/?customUrl=:customUrl
”,而获取审核请求将是“
api.myApp.com/profile/reviews
”(或类似的内容)


不管怎样,我有一种感觉,我错过了一些基本的东西。任何帮助都会很好

您可能只需要对路由命名保持RESTful,例如:

  • 获取配置文件:
router.get('/profile/:customUrl',…)

  • 获取个人资料的评论
router.get('/profile/:customUrl/reviews',…)

  • 发布新评论(请注意,您不需要写上“new”字样的路线,因为这可以通过发布请求来确定)
router.post('/profile/:customUrl/reviews',…)

如果你真的很安静,你应该使用下列动词,原因如下:

  • 获取记录
  • 添加后记录
  • 放置-编辑记录
  • 修补程序-执行部分编辑(例如,不发送整个文档)
  • 删除-删除记录

我明白了。我一直在使用.post来处理更新和删除的“post”请求,但我用来进行AJAX调用的axios支持修补和删除,express router也支持,因此我将更改这些端点以反映这一点。如果我使用一个端点来获取所有评论(不仅仅是特定概要文件的评论),我是否应该将评论从/profile/中分离出来,并制定一条单独的路线?所有评论必须在发布前获得批准,因此,有一个页面可以获取状态为“待定”的所有评论。现在,该端点是router.get('/profile/reviews',…)。请参阅上面的“我的编辑”,以获取动词列表以及您应该使用它们的内容,非常感谢。我对你的答案投了更高的票,但因为我是stackoverflow的新手,而且我的声誉低于15,所以我的答案没有显示出来。我还编辑了关于个人资料的评论(见最后一句)。有什么想法吗?如果要查看所有评论,最终取决于您的选择,您可以将评论完全分解到它自己的实体(例如,/reviews/:customUrl'),而不是绑定到一个概要文件,然后只需不传入customUrl参数即可获取所有评论。