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尽量优雅和统一。团队保持一致的风格就行了,至于哪个风格合胃口,就因人而异了。
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值