当前位置: 首页 > 面试题库 >

URL矩阵参数与查询参数

邵阳
2023-03-14
问题内容

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

例子

带有查询参数的URL:http://some.where/thing?paramA = 1&paramB = 6542
带有矩阵参数的URL:http://some.where/thing; paramA = 1; paramB = 6542
乍看之下,矩阵参数似乎只有优点:

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

只有少数框架(如JAX-RS)支持矩阵参数
当浏览器通过GET提交表单时,这些参数成为查询参数。因此,对于同一任务,它以两种参数结束。为了不混淆REST服务的用户并限制服务开发人员的工作量,在此区域中使用始终查询参数会更容易。
由于服务的开发人员可以选择支持矩阵参数的框架,因此唯一的缺点是浏览器默认会创建查询参数。

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


问题答案:

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



 类似资料:
  • 问题内容: 我正在使用查询参数来设置Google Maps API所需的值。 问题是我不需要第一个查询参数的符号。 改造产生: 这会在我需要时导致呼叫失败 我该如何解决? 问题答案: 如果指定,则必须使用附加任何内容,产生类似的内容。 如果指定,则第一个必须使用附加,产生类似的内容。 这就是改造的工作方式。 当您指定时,Retrofit认为您已经提供了一些查询参数,并使用附加了 更多 查询参数。

  • 我正在使用一个查询参数来设置Google Maps API所需的值。 改装生成: 这会在需要时导致调用失败 我怎么解决这个?

  • 我目前正在试用Apache camel(作为路由引擎)。我知道Camel支持多个DSL,并且可以使用Java(JavaDSL)或Spring(Spring DSL)进行配置。 问题: 我有以下Spring DSL配置。这个想法是,如果传入的请求具有名为“name”的头参数,它将命中当子句或其他方式将请求路由到google: 我希望上面的配置只适用于Header参数。然而,我注意到,这种配置甚至适用

  • 问题内容: 如何在Java中将查询参数编码为URL?我知道,这似乎是一个显而易见且已经提出的问题。 我不确定有两个微妙之处: 网址上的空格应该编码为“ +”还是“%20”?在chrome中,如果我输入“ http://google.com/foo=?bar me”,则chrome会将其更改为使用%20进行编码 是否有必要/正确将冒号“:”编码为%3B?Chrome没有。 笔记: 似乎不起作用,似乎

  • 在vuejs回调URL中,我有一些参数值,需要读取此参数值。例如,返回url为: ,但我有空值。 有没有办法获取vuejs中的参数值?

  • 查询创建工具及查询编辑器都支持在查询文本使用参数。你可以设置查询参数来在每次运行查询时添加变量值。参数应作为一个识别符以 $ 开头,[ ] 括住,例如 [$任何名]。 运行查询及 输入参数 对话框提供你输入想要搜索的数据。