http - URL 矩阵参数与查询参数

标签 http url rest parameters jax-rs

我想知道是在我的 URL 中使用矩阵参数还是查询参数。我找到了一个旧的 discussion对那个话题不满意。

例子

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

  • 更具可读性
  • 不需要对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/

相关文章:

java - 将多部分文件发送到 REST api 时出现 Spring 错误

javascript - Twitter 如何实时更新您的时间线?

java - CONNECT 请求未调用 Servlet service() 方法

PHP 通过 URL 传递变量

url - 如何生成简短、独特的网址

url - 如何获得完整的URL,以将其包含在Symfony2发送的新闻通讯中?

java - 如何查看我的原始 http 帖子 *来自* java/jboss?

security - 服务器可以使用 http header 命令来捕获浏览器签名吗?

rest - Neteller REST API 出现错误

javascript - Node.js - SequelizeDatabaseError : column "user_id" does not exist