AZ Tools

URI 模板展开器 (RFC 6570)

网络

RFC 6570 URI 模板描述如何由变量构建 URL,应用极广:GitHub API、OpenAPI/Swagger 路径模板,以及超媒体(HAL/JSON-LD)链接都在使用。像 `https://api.example.com{/version}/users{/id}{?fields*,page}` 这样的模板会针对一组变量展开为真实 URL。本工具实现规范的全部四个级别 — 简单 `{var}` 展开,保留(`{+var}`)与片段(`{#var}`)运算符,标签(`.`)、路径(`/`)、路径风格参数(`;`)、表单查询(`?`)与续接(`&`)运算符 — 以及 explode(`*`)与前缀(`:n`)修饰符,并正确处理空值与未定义值。将变量以 JSON 对象提供,其值可为字符串、数字、列表或键/值映射;输出会严格按运算符要求做百分号编码。已通过 RFC 6570 完整示例集验证。全部在本地运行 — 不上传任何内容。

展开后的 URL

https://api.example.com/v2/users/42?fields=name&fields=email&page=1

实现 RFC 6570 全部四个级别:运算符 + : # . / ; ? & 及 explode(*) 与前缀(:n) 修饰符。

使用方法

  1. 用 {花括号} 输入 URI 模板,例如 {/path}{?query*}。
  2. 以 JSON 对象提供变量(字符串、数字、数组或对象)。
  3. 读取展开后的 URL 并复制;修改模板或变量即可实时看到结果。

常见问题

各运算符是什么意思?
花括号内第一个字符选择运算符:无 = 逗号连接的简单值;`+` 保留保留字符不转义;`#` 生成片段;`.` 标签;`/` 路径段;`;` 形如 `;name=value` 的路径风格参数;`?` 表单查询 `?name=value`;`&` 查询续接。每个都控制各自的分隔符以及是否包含名称。
`*` 与 `:n` 有何作用?
`*` 是 explode 修饰符:列表或映射会展开为独立分量(例如 `{?list*}` → `?list=a&list=b`,而非 `?list=a,b`)。`:n` 是前缀修饰符,在编码前将字符串值截断为前 n 个字符(例如 `value` 的 `{var:3}` → `val`)。
如何传入列表和映射?
用 JSON:列表是数组(`"fields": ["name","email"]`),关联映射是对象(`"keys": {"semi": ";"}`)。字符串与数字为标量。缺失、null、空列表或空对象的变量视为未定义,对输出无任何贡献。
编码是否正确?
正确 — 值按运算符的允许集合做百分号编码。简单运算符及多数运算符会编码非保留集合之外的一切,而 `+` 与 `#` 还会原样放行保留 URL 字符(及已有的 %XX 三元组),与 RFC 6570 一致。实现通过了规范的完整示例表。

相关工具