You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenAPI路径模板是否支持RFC 6570语法及规范问询

OpenAPI路径模板语法相关疑问

我存在一些困惑,swagger.io提到OpenAPI参数序列化与RFC 6570路径/查询模板语法存在关联,openapis.com文档也有相关提及。我关注的是路径模板字符串中表达OpenAPI参数的确切语法。

A) OA规范是否允许使用RFC 6570的相关部分来替代参数对象?

我知道以下写法是被允许的:

paths:
  "/test/{foo}":
    get:
      operationId: getFoo
      parameters:
      - in: path
        name: foo
        required: true
        style: label
        schema:
          type: string

但以下写法是否被允许?它与第一种写法等价吗?

paths:
  # Parameters array omitted, as "." marks "foo" a "label" style parameter
  "/test/{.foo}":
    get:
      operationId: getFoo

B) 若第二种示例不被允许,路径参数的语法是什么?

从示例来看似乎是{<identifier>},但是否还有更多规则?

C) 若采用B选项(路径模板不使用RFC语法),{<identifier>}是否必须对应匹配的参数对象?

即路径模板中有多少个{<identifier>},就需要对应多少个参数对象?我对文档措辞不是完全确定,但openapis.com似乎暗示了这一点。文档还提到:

An exception is if the path item is empty, for example due to ACL constraints, matching path parameters are not required.
这句话是什么意思?

参考资料:

  • OpenAPI 3.1规范:路径模板匹配章节
  • Swagger文档:参数序列化章节

解答

A) 不允许,二者不等价

OpenAPI规范不支持用RFC 6570的模板语法(比如{.foo})来替代显式的参数对象。路径模板里的{<name>}仅用于标识参数的位置,参数的具体规则(类型、风格、是否必填等)必须通过parameters数组中的对象定义。

你提供的第二种写法是无效的:

  • OpenAPI解析器只会识别{foo}这类无修饰的占位符作为路径参数,{.foo}会被当作字面量路径的一部分,不会被解析为参数。
  • 即使解析器能识别RFC 6570语法,也无法推断参数的类型、是否必填等关键信息,而这些是OpenAPI规范要求必须明确声明的。

B) 路径参数的标准语法

OpenAPI路径模板的参数语法只有一种:{<parameter-name>},其中<parameter-name>必须符合以下规则:

  • 只能包含字母、数字、下划线(_)、连字符(-)和点(.)
  • 不能包含RFC 6570中的修饰符(比如.、/、?等前缀)
  • 参数名称必须与parameters数组中对应路径参数的name字段完全匹配

C) 是的,必须一一对应;例外情况说明

  1. 参数对象必须与路径模板占位符一一对应:
    路径模板里的每一个{<identifier>},都必须在parameters数组中有一个对应的in: path参数对象,且name字段完全一致。反之,parameters中的路径参数也必须在路径模板中有对应的占位符,否则会被视为无效定义。

  2. 例外情况的含义:
    文档中提到的例外是指:如果某个路径项(paths下的某个路径)是空的(比如因为ACL权限限制,没有定义任何HTTP方法),那么即使路径模板里有占位符,也不需要提供对应的参数对象。举个例子:

    paths:
      "/test/{foo}":
        # 没有定义get/post等任何操作,是空的路径项
    

    这种情况下,{foo}不需要对应的参数对象,因为这个路径项没有任何可执行的操作,参数规则也就没有意义。


内容的提问来源于stack exchange,提问作者Balázs Édes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:25:39