【问题标题】:URL-parameters input seems inconsistentURL 参数输入似乎不一致
【发布时间】:2020-08-25 15:49:27
【问题描述】:

我查看了有关 URL 参数的多个说明,这些说明都建议了 2 种方法:

参数可以跟随/正斜杠或由参数名称指定,然后由参数值指定。所以要么:

1)  http://numbersapi.com/42

2)  http://numbersapi.com/random?min=10&max=20

对于第二个,我使用 ? 提供参数名称和参数值。我还使用 & 号提供了多个参数。

现在我看到下面的请求可以正常工作,但不符合上述规则:

 http://numbersapi.com/42?json

我知道请求将 42 设置为参数,但为什么是?后面不跟参数名称,只跟值。还有 ?好像被用作&号???

【问题讨论】:

    标签: api web url


    【解决方案1】:

    来自Wikipedia

    每个 HTTP URL 都符合通用 URI 的语法。 URI 通用语法由五个组件的层次序列组成:

    URI = scheme:[//authority]path[?query][#fragment]
    

    其中权限组件分为三个子组件

    authority = [userinfo@]host[:port]
    

    这在语法图中表示为:

    如您所见,? 结束了 URL 的 path 部分并开始了 query 部分。

    查询部分通常是由name=value 对组成的& 分隔字符串,但并非必须如此,因此jsonquery 部分的有效值。

    或者,正如维基百科文章所说:

    • 一个可选的 query 组件,前面有一个问号 (?),包含非分层数据的查询字符串。它的语法没有很好的定义,但按照惯例,通常是由分隔符分隔的一系列属性-值对。

    请求处理器处理缺少= 符号的name=value 对也很常见,就好像它是name=

    例如如果您正在编写 Servlet 代码并调用 servletRequest.getParameter("json"),它将为问题中的最后一个 URL 返回一个空字符串 ("")。

    【讨论】:

    • 非常感谢 Andreas 的详尽解释。这很有帮助。所以查询部分总是以 ?但不一定包含键值对,而可能只包含值本身。在我上面的示例中,数字 42 因此不是参数,而是路径的一部分,对吧?
    • @Tartaglia 没错。在 Spring 中,它被称为 @PathVariable。参见例如@RequestParam vs @PathVariable,这表明你可以同时做这两件事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多