我们的产品是一个client/server
应用程序,它在现场有多个版本的客户端,但只有一个运行最新版本的服务器来服务所有API
呼叫。我们有/将有数百个API
端点,我正在尝试如何最好地处理版本控制。我想做的是能够避免应用attributes
到每一个方法的繁重任务,或者每次我们进行微小的更改时复制整个控制器。
我可能会误解大多数关于此的文件/实践,但似乎每次你碰到你的时候API
你都必须经历并完成所有这些工作,这似乎充其量是低效的。
相反,我想做的是使用编写时attribute
的版本对每个端点应用一个,然后客户端找到等于或小于客户端版本的最接近的版本。
例如,如果端点被写入,[ApiVersion("1.0")]
那么这就是它获得的属性。如果我们必须修改它,我会复制方法,重命名它,应用 aRoutePrefix
attribute
以便正确命中并应用attribute
我们整体版本的新方法API
(在这个例子中,我放了1.5
)。
这是一个简单的例子:
[HttpGet]
[ApiVersion("1.0")]
[Route("GetHeartBeat")]
public bool GetHeartBeat()
{
return true;
}
[HttpGet]
[ApiVersion("1.5")]
[Route("GetHeartBeat")]
public bool GetHeartBeat2()
{
return false;
}
当我使用 url 版本控制时,这没有问题:
/api/v1.0/GetHeartBeat
或者/api/v1.5/GetHeartBeat
但/api/v1.3/GetHeartBeat
没有,因为那个版本不存在..
我想要发生的是,如果我有一个正在运行的客户端1.3
,那么它将找到等于或小于最新版本的最接近的版本。所以/api/v1.3/GetHeartBeat
会收到,因为1.3
不存在,然后它会查看最接近/早期的版本,在这种情况下是1.0
.
我可以写一堆路由逻辑来完成这个,但我觉得必须有一个开箱即用的解决方案,因为我不能成为第一个尝试这个的人。有没有一个nuget
包可以做到这一点?