URL矩阵参数与查询参数

我想知道是在URL中使用矩阵还是查询参数。我发现对该主题的较早讨论并不令人满意。

例子

带有查询参数的URL:http://some.where/thing?paramA = 1&paramB = 6542

带有矩阵参数的URL:http://some.where/thing; paramA = 1; paramB = 6542

乍看之下,矩阵参数似乎只有优点:

更具可读性

不需要对XML文档中的“&”进行编码和解码

带有“?”的网址 在许多情况下不会被缓存;具有矩阵参数的URL被缓存

矩阵参数可以出现在路径的任何地方,并且不限于其结尾

矩阵参数可以具有多个值: paramA=val1,val2

但是也有缺点:

只有少数框架(如JAX-RS)支持矩阵参数

当浏览器通过GET提交表单时,这些参数成为查询参数。因此,对于同一任务,它以两种参数结束。为了不混淆REST服务的用户并限制服务开发人员的工作量,在此区域中使用始终查询参数会更容易。

由于服务的开发人员可以选择支持矩阵参数的框架,因此唯一的缺点是浏览器默认会创建查询参数。

还有其他缺点吗?你会怎么做?

回答:

重要的区别在于,矩阵参数适用于特定的路径元素,而查询参数适用于整个请求。当对多个级别的资源和子资源进行复杂的REST样式查询时,这会起作用:

http://example.com/res/categories;name=foo/objects;name=green/?page=1

这实际上归结为命名空间。

注意:此处的资源“级别”为categoriesobjects

如果仅查询参数用于多级URL,您将最终得到

http://example.com/res?categories_name=foo&objects_name=green&page=1

这样,您还将失去请求中参数局部性所增加的清晰度。此外,当使用类似JAX-RS的框架时,所有查询参数都将显示在每个资源处理程序中,从而导致潜在的冲突和混乱。

如果您的查询只有一个“级别”,那么区别并不是很重要,并且两种类型的参数可以有效地互换,但是,查询参数通常得到更好的支持并且得到更广泛的认可。通常,我建议您坚持使用诸如HTML表单和简单的单级HTTP API之类的查询参数。

以上是 URL矩阵参数与查询参数 的全部内容, 来源链接: utcz.com/qa/413373.html

回到顶部