我想知道是在我的 URL 中使用矩阵参数还是查询参数。我找到了一个旧的 discussion对那个话题不满意。
例子
- 带有查询参数的 URL:http://some.where/thing?paramA=1¶mB=6542
- 带有矩阵参数的 URL:http://some.where/thing;paramA=1;paramB=6542
乍一看矩阵参数似乎只有优点:
- 更具可读性
- 不需要对XML文档中的“&”进行编码和解码
- 带有“?”的 URL在很多情况下不被缓存;缓存带有矩阵参数的 URL
- 矩阵参数可以出现在路径的任何地方,不限于它的末端
- 矩阵参数可以有多个值:
paramA=val1,val2
但是也有缺点:
- 只有少数框架,如 JAX-RS支持矩阵参数
- 当浏览器通过 GET 提交表单时,参数成为查询参数。所以它最终会为同一个任务提供两种参数。为了不混淆 REST 服务的用户并限制服务开发人员的工作,在这个区域使用始终查询参数会更容易。
由于服务的开发者可以选择支持矩阵参数的框架,唯一剩下的缺点是浏览器默认创建查询参数。
还有其他缺点吗?你会怎么做?
最佳答案
重要的区别在于,矩阵参数适用于特定路径元素,而查询参数则适用于整个请求。这在对多个级别的资源和子资源进行复杂的 REST 样式查询时发挥作用:
http://example.com/res/categories;name=foo/objects;name=green/?page=1
归结为命名空间。
注意:此处资源的“级别”是类别
和对象
。
如果只将查询参数用于多级 URL,您最终会得到
http://example.com/res?categories_name=foo&objects_name=green&page=1
这样你也会失去请求中参数位置所增加的清晰度。此外,当使用像 JAX-RS 这样的框架时,所有查询参数都会显示在每个资源处理程序中,从而导致潜在的冲突和困惑。
如果您的查询只有一个“级别”,那么区别并不重要,两种类型的参数可以有效地互换,但是,查询参数通常得到更好的支持和更广泛的认可。一般来说,我建议您坚持使用查询参数,例如 HTML 表单和简单的单级 HTTP API。
关于http - URL 矩阵参数与查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2048121/