[ PROMPT_NODE_24760 ]
versioning
[ SKILL_DOCUMENTATION ]
# 版本控制
> 从单个代码库提供多个 API 版本
组件版本控制允许您在单个标识符下维护同一工具、资源或提示词的多个实现。您可以注册每个版本,FastMCP 会处理其余部分:客户端默认看到最高版本,但您可以进行过滤以精确公开您想要的版本。
主要用例是从一个代码库提供不同的 API 版本。无需为 v1 和 v2 客户端维护单独的部署,您可以对组件进行版本控制,并使用 `VersionFilter` 创建不同的 API 表面。
## 版本化 API 表面
考虑一个需要同时支持 v1 和 v2 客户端的服务器。v2 API 向现有工具添加了新参数,您希望两个版本能够整洁地共存。在共享提供程序上定义您的组件,然后创建具有不同版本过滤器的独立服务器。
python
from fastmcp import FastMCP
from fastmcp.server.providers import LocalProvider
from fastmcp.server.transforms import VersionFilter
# 在共享提供程序上定义版本化组件
components = LocalProvider()
@components.tool(version="1.0")
def calculate(x: int, y: int) -> int:
"""相加两个数字。"""
return x + y
@components.tool(version="2.0")
def calculate(x: int, y: int, z: int = 0) -> int:
"""相加两个或三个数字。"""
return x + y + z
# 创建共享提供程序但具有不同过滤器的服务器
api_v1 = FastMCP("API v1", providers=[components])
api_v1.add_transform(VersionFilter(version_lt="2.0"))
api_v2 = FastMCP("API v2", providers=[components])
api_v2.add_transform(VersionFilter(version_gte="2.0"))
连接到 `api_v1` 的客户端看到的是双参数的 `calculate`。连接到 `api_v2` 的客户端看到的是三参数版本。两个服务器共享相同的组件定义。
`VersionFilter` 接受两个仅限关键字的参数,这些参数反映了比较运算符:`version_gte`(大于或等于)和 `version_lt`(小于)。您可以使用其中一个或两个来定义您的版本范围。
python
# 版本 = 2.0 (v2.x 及更高版本)
VersionFilter(version_gte="2.0")
# 版本在 [2.0, 3.0) 范围内 (仅 v2.x)
VersionFilter(version_gte="2.0", version_lt="3.0")
> **注意:** **未版本化的组件不受版本过滤的影响。** `VersionFilter` 仅影响版本化组件 - 未版本化组件始终可以通过,无论过滤器的约束如何。这确保了