REST URL 请求和方括号('[' 和 ']')

REST URL request and square brackets ('[' and ']')

我想知道方括号([])在 REST URL 参数中是否是标准的。

  1. 我必须通过设置 URL 中的所有参数来调用 Cloud REST WebService。 URL 看起来像:https://DNS_SERVEUR/api/2/conversation?filters[website]=1234&data=a0123....

    可以看到其中一个参数的名称中包含方括号:filters[website]

  2. 直接使用 Firefox 或 SOAP-UI 调用 URL 不会引发任何问题(它们不会在方括号中崩溃)。

    但是,使用 Oracle 融合中间件 12.2.1.1.0 和专用 REST 适配器时,出现错误:参数名称中不允许使用方括号字符。

所以这是我的问题:方括号字符([])可以用作标准 REST URL 参数吗?还是 Oracle 融合中间件的限制?

我上网查了一下,没有得到明确的答案。使用它的唯一示例(法语)是在 PHP 中操作关联数组:http://cyberzoide.developpez.com/php4/url/#LII-E。由于 PHP 非常宽松,我不认为它具有可靠的标准参考。

RFC 3986 应该是 go-to 以了解 URI query 中允许的内容。

query       = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

挂钩字符是 gen-delims,而不是 sub-delims

gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"

因此出现在查询部分时应该对其进行编码。

另见

事实上,有一种方法可以管理 REST WebService,它会影响 URL 中允许的字符:

  1. 没有任何描述语言,那么除了 HTTP 协议允许的之外,没有任何规则可以控制您的 URI。因此,参考 VoiceOfUnreason 的响应,[] 字符是允许的,但解释取决于服务器应用程序
  2. 使用 WADL 描述语言(相当于 WSDL,但用于 REST)。专用 RFC (Web Application Description Language) tells parameter's name must respect NMTOKEN schema. And if you look at NMTOKEN definition (xsd:NMTOKEN),它不允许 [].

然而 Oracle 融合中间件将 WADL 与 REST 一起使用,它自然不允许在 REST 参数名称中使用 [] 字符。