我做了谷歌搜索,但我找不到我真正需要的东西。 我需要查询一个API,它具有相同的路由,但具有不同的参数。
示例:
router.get('/ items /:query,function(){})
在这种情况下,我会搜索所有项目
router.get('/ items /:id,function(){})
在这里,我会寻找一个特定的项目
答案 0 :(得分:1)
您的问题的核心是您尝试在同一位置指定两个不同的资源。如果您设计的API遵循宁静的原则,那么您就会明白为什么这不是明智的选择。这里有两个很好的起点:
https://en.wikipedia.org/wiki/Representational_state_transfer
http://www.restapitutorial.com/lessons/whatisrest.html
在restful api中,根资源代表项目集合:
/api/items
...当您指定一个表示您只想要一个项目的ID时:
/api/items/abc123
如果你真的还想完成你在问题中提出的问题,你需要添加一个url参数,例如/ items / query?query = true或/ items / abc123?detail = true但这会让人困惑99%的网络开发人员都会查看您的代码。
此外,我不确定你是否真的这么说,但是当你传递一个名为" query"的变量时到服务器似乎表明您将从客户端向服务器发送SQL查询(或类似的数据定义语言)。出于多种原因,这是一种危险的做法 - 最好将所有这类代码留在您的服务器上。
编辑:如果你真的绝对必须这样做,那么可能有一个查询参数,表示?collection = true。这至少可以被其他可能必须在将来维护代码的开发人员理解。另外,请务必添加评论,以解释为什么您无法实施休息,这样您就不会留下不良声誉:)
答案 1 :(得分:0)
问题在于,如果没有额外的模式匹配,Express就无法区分/items/:query
和/items/:id
,它们是相同的路由模式,只是具有不同的别名参数。
根据您打算构建查询的方式,您可能需要考虑使用路由/items
,然后使用查询字符串参数或具有单独的/items/search/:query
端点。