我想知道是否在我的 URL 中使用矩阵或查询参数。我发现对该主题的较早讨论并不令人满意。
例子
乍一看,矩阵参数似乎只有优点:
paramA=val1,val2
但也有缺点:
由于服务的开发者可以选择支持矩阵参数的框架,剩下的唯一缺点就是浏览器会默认创建查询参数。
还有其他缺点吗?你会怎么做?
重要的区别是矩阵参数适用于特定的路径元素,而查询参数适用于整个请求。这在对多个级别的资源和子资源进行复杂的 REST 样式查询时会发挥作用:
http://example.com/res/categories;name=foo/objects;name=green/?page=1
这真的归结为命名空间。
注意:这里的资源“级别”是categories和objects。
categories
objects
如果只对多级 URL 使用查询参数,您最终会得到
http://example.com/res?categories_name=foo&objects_name=green&page=1
这样,您也会失去请求中参数的位置所增加的清晰度。此外,当使用像 JAX-RS 这样的框架时,所有查询参数都会显示在每个资源处理程序中,从而导致潜在的冲突和混乱。
如果您的查询只有一个“级别”,那么区别并不重要,两种类型的参数可以有效地互换,但是,查询参数通常得到更好的支持和更广泛的认可。一般来说,我会建议您坚持使用查询参数,例如 HTML 表单和简单的单级 HTTP API。