小编典典

URL 矩阵参数与查询参数

all

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

例子

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

  • 更具可读性
  • 不需要对 XML 文档中的“&”进行编码和解码
  • 带有“?”的网址 很多情况下没有缓存;带有矩阵参数的 URL 被缓存
  • 矩阵参数可以出现在路径中的任何地方,并且不限于它的末尾
  • 矩阵参数可以有多个值:paramA=val1,val2

但也有缺点:

  • 只有像JAX-RS这样的少数框架支持矩阵参数
  • 当浏览器通过 GET 提交表单时,参数变为查询参数。因此,对于同一任务,它最终会得到两种参数。为了不混淆 REST 服务的用户并限制服务开发人员的工作量,在这方面使用始终查询参数会更容易。

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

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


阅读 64

收藏
2022-07-13

共1个答案

小编典典

重要的区别是矩阵参数适用于特定的路径元素,而查询参数适用于整个请求。这在对多个级别的资源和子资源进行复杂的 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。

2022-07-13