何时使用查询参数和矩阵参数?

93

查询参数: http://example.com/apples?order=random&color=blue

矩阵参数: http://example.com/apples;order=random;color=blue

  1. 何时应该使用查询参数,何时应该使用矩阵参数?
  2. 为什么可以在 URL 中间使用矩阵参数,但无法使用查询参数?例如:http://example.com/apples;order=random;color=blue/2006/archive
  3. 如果矩阵参数是查询参数的超集,为什么不一直使用它们?

您可以在此处阅读有关矩阵参数的更多信息:http://www.w3.org/DesignIssues/MatrixURIs.html

1个回答

113

矩阵参数(Matrix parameters)和查询参数(Query Parameters)之间的区别不仅在于惯例。

主要区别如下:

  • 带有查询参数的URL目前不能被中介/代理缓存
  • 矩阵参数可以出现在路径的任何位置
  • 计算相对URI的方法不同
  • 查询参数通常被滥用来添加新动词,而不是在资源上使用现有方法
  • 矩阵参数不是资源,它们是帮助在难以在层次结构中表示的信息空间中引用资源的方面
  • 我在查询参数与矩阵参数 中详细阐述了这些内容并附有更多参考资料。


    4
    带有查询参数的 URL 不会被中间代理缓存,这不是 HTTP 标准所要求的行为,可能只是某些实现特定的问题。 - Gili
    1
    总之,如果你所说的是真的,为什么不将所有查询参数迁移到矩阵参数中呢? - Gili
    2
    @Gili从他的文章中并没有说行为是由HTTP强制规定的。在早期web的时代,代理不会缓存带有查询参数的url,这是因为它们不信任动态生成页面的缓存控制信息。但规范和实际操作有时候(或大多数情况下)是不同的。 - Hendy Irawan
    6
    这个答案有3/5是错误的。关于相对URI和在路径中嵌入参数的区别是正确的。所有其他观点都是错误的,因为一旦矩阵参数变得更流行,它们将具有完全相同的问题,所以在这方面它们与查询参数没有区别。 - Gili
    3
    查询参数有助于定义可选条件,而矩阵参数是路径变量的补充信息。请看以下网址:查询:http://localhost/services/api/movies?limit=10&actor=true&name=true 矩阵:http://localhost/services/api/movies/actor;name?limit=10当作为矩阵而非查询使用时更加合理。此网址证明了bdargan的第5点观点。 - skipy

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接