RESTURL请求和方括号(';[';和';]';)

RESTURL请求和方括号(';[';和';]';),rest,parameters,character,standards,Rest,Parameters,Character,Standards,我想知道方括号([和])是否是RESTURL参数中的标准 我必须通过设置URL中的所有参数来调用Cloud REST Web服务。URL看起来像:https://DNS_SERVEUR/api/2/conversation?filters[网站]=1234&数据=a0123…. 您可以看到一个参数的名称包含方括号:filters[website] 直接使用Firefox或SOAP-UI调用URL不会引起任何问题(它们不会在方括号内崩溃) 但是,使用Oracle Fusion中间件12.2.1.1

我想知道方括号(
[
]
)是否是RESTURL参数中的标准

  • 我必须通过设置URL中的所有参数来调用Cloud REST Web服务。URL看起来像:
    https://DNS_SERVEUR/api/2/conversation?filters[网站]=1234&数据=a0123….

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

  • 直接使用Firefox或SOAP-UI调用URL不会引起任何问题(它们不会在方括号内崩溃)

    但是,使用Oracle Fusion中间件12.2.1.1.0和专用REST适配器,我有一个错误:参数名称中不允许使用方括号字符

  • 所以我的问题是:方括号字符(
    [
    ]
    )可以用作标准RESTURL参数吗?或者这是Oracle Fusion中间件的一个限制


    我在网上搜索,没有得到任何明确的答案。使用它的唯一示例(法语)是在PHP中操纵关联数组:。由于PHP非常宽容,我不认为它有一个可靠的标准参考。

    RFC3986应该是理解URI中允许的内容的途径

    query       = *( pchar / "/" / "?" )
    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
    
    钩子字符是
    gen-delims
    ,而不是
    sub-delims

    gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
    
    因此,当它们出现在查询部分时,应该对其进行编码


    另请参见

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

  • 如果没有任何描述语言,那么就没有规则来控制您的URI,除非HTTP协议允许。因此,参考VoiceOfUnreason的响应,允许使用[]个字符,但解释取决于服务器应用程序
  • 使用WADL描述语言(相当于WSDL,但用于REST)。专用RFC()告诉参数的名称必须遵守NMTOKEN模式。如果查看NMTOKEN定义(),它不允许[]

  • 但是Oracle Fusion中间件将WADL与REST结合使用,这很自然,REST参数的名称中不允许有[]个字符。

    这里有一些好的和坏的URL模式的例子:但与“[”和“]”参数无关谢谢,它回答了我的问题。这些字符作为分隔符是合法的,但使用它们(或不使用)取决于解析算法。在,它说:“这些字符被称为“保留”,因为它们可能(也可能不)被通用语法、每个特定于方案的语法或URI的解引用算法的特定于实现的语法定义为分隔符。”。在我看来,算法决定禁止这些字符