我检查了一些 Web 框架,如 Laravel、Slim、express.js 等。它们都不支持查询字符串参数。我想知道为什么会发生这种情况。我的意思是查询字符串是 URI 的一部分,根据 URI 标准,路径包含 URI 的分层部分,而查询字符串包含 URI 的非分层部分。由于完整的 URI 是资源标识符,而不仅仅是路径,我们还应该使用查询字符串进行路由。至少这是我的逻辑。例如,我认为
/people?search=keywords
是一个完全有效的资源标识符。我仍然可以用这些框架做的是 router.get('/people')
,然后在控制器中使用 if-else 语句。所以问题是我在这里缺少什么,为什么查询不是路由的一部分?
查询字符串通常用于过滤或精炼数据,而不是决定采取哪条路线。
将 Web 框架中的路由想象为查找您以前从未去过的地址。街道名称就像 URL 中的路径。它带您前往一般区域。
GET /streetName
I'd expect an endpoint like this to present me with a list of all the available street numbers and any other important information.
This endpoint would likely map to an index action in a controller.
一旦您到达正确的街道,您就开始查看门牌号以找到您要去的确切位置,这就像使用查询字符串来细化或过滤结果一样。
GET /streetName?number=1337
or
GET /streetName/1337 (same concept)
I'd expect either of these to give me information specific to the streetName + number.
This endpoint would likely map to a show action in a controller.