params与query分别适合于何种场景?

问题描述

在路由设计中,参数可以以query和params两种形式存在url中。通常,我们会将分页、搜索等信息放在query里;而点击进如某个列表项目的详情页时,会把项目id以params的形式放在url中。但是,当列表的层次特别深,出现列表详情又是个列表,点击详情双是个列表,再点详情叒是个列表……这种情况下,url的设计就值得研究一番了。

笔者在研究了一阵RESTful API后,又写了篇关于RESTful API的一些思考与疑问,与本主题相关性较强,可作为拓展阅读。

场景

公司列表->部门列表->员工列表->员工详细

要支持面包屑(公司名 / 部门名 / 员工名)

  公司列表 部门列表 员工列表 员工详情 说明
params风格1 /corps/ /corps/111/ /corps/111/222/ /corps/111/222/333/ 依次罗列id
params风格2 /corps/ /corps/111/ /111/departs/222/ /111/222/users/333/ 最后一定是/items/item_id格式
params风格3 /corps/ /corps/111/ /corps/111/departs/222/ /corps/111/departs/222/users/333/ 严格保持restful格式
query风格 /corps/ /departs/?corp=111 /users/?corp=111&depart=222 /detail/?corp=111&depart=222&user=333 从url直接看出意思,query依次罗列
混合风格 /corps/ /corps/111/ /departs/222/?corp=111 /users/333/?corp=111&depart=222 最后是/items/item_id格式,缺失信息用query补

个人倾向【query风格】和【混合风格】

搜索或分页

另外,列表通常都会有搜索和分页功能,会将多个搜索的key及value也放到url上。这个场景,毫无疑问是选择query方案的。但是,结合场景1来看,如果都放到query里,且值比较多时,就显得比较乱了。所以我们还需要另外的策略来对query的格式进行一下约束。

伪代码(记得用encodeURIComponent编码):

?searchkey=JSON.stringify({userid:9527,corp:222})&info=JSON.stringify({corp:111,depart:222,user:333})

这样就比较方便取参数,而且不同类型的参数隔离开了。不过!!url会变得更长,更难看!鱼和熊掌不可得兼啊。。。

总结

关键问题就两个

  1. url要存有全部信息
  2. 不同类型信息尽量隔离
在解决这两个问题的基础上,让url尽量优雅和统一。团队保持一致的风格就行了,至于哪个风格合胃口,就因人而异了。

猜你喜欢

转载自blog.csdn.net/zhaolandelong/article/details/80805543
今日推荐