ai
  • index
  • 1.首页
  • 2.介绍
  • 3.架构概览
  • 4.服务器概念
  • 5.客户端概念
  • 6.版本控制
  • 7.连接到远程MCP服务器
  • 8.连接到本地MCP服务器
  • json_rpc
  • 9.构建一个MCP服务器
  • 10.检查员
  • 11.构建一个MCP客户端
  • 14.架构
  • 15.基础协议概述
  • 16.生命周期
  • 17.传输
  • 18.授权
  • 19.安全最佳实践
  • 20.取消
  • 21.Ping
  • 22.进展
  • 23.Roots
  • 24.采样
  • 25.启发
  • 26.服务器特性
  • 27.提示词
  • 28.资源
  • 29.工具
  • 30.完成
  • 31.日志记录
  • 32.分页
  • 33.架构参考
  • URI模板
  • 12.实现
  • http.server
  • 动态客户端注册协议
  • 受保护资源元数据
  • 授权服务器元数据
  • JWKS
  • PKCE
  • PyJWT
  • secrets
  • watchfiles
  • 实现authorization
  • 实现cancel
  • 实现completion
  • 实现logging
  • 实现pagination
  • 实现process
  • 实现transport
  • psutil
  • pytz
  • zoneinfo
  • contextlib
  • Starlette
  • mcp.1.starter
  • mcp.2.Resource
  • mcp.3.structured_output
  • mcp.4.prompts
  • mcp.5.context
  • mcp.6.streamable
  • mcp.7.lowlevel
  • mcp.8.Completion
  • mcp.9.Elicitation
  • mcp.10.oauth
  • mcp.11.integration
  • mcp.12.best
  • mysql-mcp
  • databases
  • uvicorn
  • asynccontextmanager
  • AsyncExitStack
  • streamable
  • aiohttp
  • publish
  • email
  • schedule
  • twine
  • 1.教学文档总览
  • 2.教师使用指南
  • 3.教学系统快速参考
  • 4.新生入门指南
  • 5.学生使用指南
  • 1.URI 模板(URI Template)
  • 2. URI 模板的基本概念
  • 3. URI 模板的语法
    • 3.1 变量表达式(Variable Expressions)
    • 3.2 操作符(Operators)
  • 4. 级别(Levels)
  • 5. 实际应用
    • 5.1 RESTful API 设计
    • 5.2 超媒体(HAL, JSON Hyper-Schema)
    • 5.3 JavaScript 实现
  • 6. 总结

1.URI 模板(URI Template) #

RFC 6570 定义了一种称为 URI 模板(URI Template) 的语法,用于动态构建 URI(统一资源标识符)。URI 模板允许在字符串中嵌入变量,并在运行时替换这些变量以生成完整的 URI。它广泛应用于 RESTful API、超媒体系统(如 HAL、JSON Hyper-Schema)和 Web 链接中。

2. URI 模板的基本概念 #

URI 模板是一个字符串,其中包含 变量表达式(variable expressions),这些表达式在运行时会被替换为实际值。例如:

http://example.com/{user}/posts{?page,limit}
  • {user}、{page}、{limit} 是变量,运行时会被替换成实际值。
  • 最终可能生成:
    http://example.com/johndoe/posts?page=2&limit=10

3. URI 模板的语法 #

3.1 变量表达式(Variable Expressions) #

变量表达式的基本形式是 {变量名} 或 {变量名*}(用于路径扩展):

  • {var} → 普通变量
  • {var*} → 路径扩展(用于 / 分隔的路径变量)
  • {+var} → 保留字符(如 /、? 不会被转义)
  • {#var} → 片段标识符(如 #section)
  • {.var} → 点分隔扩展(如 .min.js)
  • {/var} → 路径段扩展(如 /user/john)
  • {;var} → 参数扩展(如 ;name=john)
  • {?var} → 查询参数扩展(如 ?q=search)
  • {&var} → 查询参数连接(如 &page=1)

示例:

http://example.com/{user}{/path*}{?query,limit}
  • 如果 user="john", path=["posts", "123"], query="search", limit=10,则扩展为:
    http://example.com/john/posts/123?query=search&limit=10

3.2 操作符(Operators) #

操作符影响变量如何插入 URI: | 操作符 | 含义 | 示例 | |--------|------|------| | {var} | 默认(可能转义 /、? 等) | {user} → john%20doe | | {+var} | 保留字符不转义 | {+path} → dir/file | | {#var} | 用于 URI 片段(# 后) | {#section} → #intro | | {.var} | 点分隔扩展 | {.ext} → .json | | {/var} | 路径段扩展 | {/user} → /john | | {;var} | 分号参数扩展 | {;params} → ;a=1;b=2 | | {?var} | 查询参数扩展 | {?query} → ?q=hello | | {&var} | 查询参数连接 | {&page} → &page=1 |

4. 级别(Levels) #

RFC 6570 定义了 4 个级别(Levels),表示不同的功能支持程度: | 级别 | 描述 | 示例 | |------|------|------| | Level 1 | 仅简单变量替换 | {var} | | Level 2 | 支持 +、#、.、/、;、? | {+path}/file | | Level 3 | 支持所有操作符 | {?query,limit} | | Level 4 | 支持复合变量(数组/对象) | {user:2}(截取前 2 字符) |

5. 实际应用 #

5.1 RESTful API 设计 #

GET /users/{id}/posts{?page,limit}
  • 替换 {id}, {page}, {limit} 后:
    GET /users/123/posts?page=1&limit=10

5.2 超媒体(HAL, JSON Hyper-Schema) #

{
  "_links": {
    "self": { "href": "/users/{id}" },
    "search": { "href": "/search{?q}" }
  }
}
  • 运行时替换 {id} 和 {q} 生成完整 URI。

5.3 JavaScript 实现 #

使用库如 uritemplate(Node.js):

const uriTemplate = require('uritemplate');
const template = uriTemplate.parse('http://example.com/{user}/posts{?page}');
const uri = template.expand({ user: 'john', page: 2 });
console.log(uri); // "http://example.com/john/posts?page=2"

6. 总结 #

  • RFC 6570 定义了 URI 模板,用于动态生成 URI。
  • 变量表达式 如 {var}、{+var}、{?var} 等控制 URI 的构造方式。
  • 4 个级别 提供不同的功能支持。
  • 广泛应用于 REST API、超媒体系统、前端路由 等场景。

如果你正在设计 API 或需要动态构建 URL,URI 模板是一个非常强大的工具!

访问验证

请输入访问令牌

Token不正确,请重新输入