在应用服务中API
更新是很广泛的事情,为了服务良好地运做不少时候须要新旧版本同时兼容;为了应对这一系列的需求FastHttpApi
在新版中强化了Url重写机制来支持API
访问版本控制,由原来固定的重写规则调整成支持动态数据的重写规则,主要支持域名,header和querystring等不一样值进一个重写的定义。接下来说解如何经过FastHttpApi
来控制不一样版本的API
访问git
[Controller(BaseUrl = "Api")] public class Api { public object Hello(string name) { return $"hello {name} at {DateTime.Now}"; } } [Controller(BaseUrl = "Api/v2")] public class ApiV2 { public object Hello(string name) { return $"hello {name} at {DateTime.Now}[v2]"; } }
以上是两个不一样版本的API功能,访问的Url分别是/Api/hello
和/Api/v2/hello
github
其实有不少时候但愿不改变Url路径的状况来对不一样版原本进行一访问,这样在使用调整上就比较方便简单。FastHttpApi
支持经过域名,请求头和请求参数来应对不一样状况的重写,这样就可让调用者没法关注访问的路径统一设置相关参数便可。web
组件支持依据域名来重写Url,针对这状况能够定义一个V2.beetlex.com
来访问/Api/v2/hello
,在程序启动的时候加入一个重写api
static void Main(string[] args) { var builder = new HostBuilder() .ConfigureServices((hostContext, services) => { services.UseBeetlexHttp(o => { o.AddFilter<DefaultJsonResultFilter>(); o.LogToConsole = true; o.Port = 80; o.SetDebug(); o.LogLevel = BeetleX.EventArgs.LogType.Info; }, b => { b.UrlRewrite .Add("v2.beetlex.com", "/api/{action}", "/api/v2/{action}"); }, typeof(Program).Assembly); }); builder.Build().Run(); }
只要是经过V2.beetlex.com
访问的/api/{action}
重写到/api/v2/{action}
,重写后访问的结果以下:浏览器
通常状况不多会用域名来区分,用域名区分的场更可能是正式和测试API的兼容部署,测试完成后会替换原则有的API;后面会讲述如何接管旧的请求到新的版本中。框架
其实在Header中添加则是对整个Url是没有任何影响的,组件能够这样定义这个重写规则测试
static void Main(string[] args) { var builder = new HostBuilder() .ConfigureServices((hostContext, services) => { services.UseBeetlexHttp(o => { o.AddFilter<DefaultJsonResultFilter>(); o.LogToConsole = true; o.Port = 80; o.SetDebug(); o.LogLevel = BeetleX.EventArgs.LogType.Info; }, b => { b.UrlRewrite .Add("version=v2", "/api/{action}", "/api/v2/{action}") }, typeof(Program).Assembly); }); builder.Build().Run(); }
以上是配置一个version
变量,只要这个变量是等于v2
的状况则会触发这个重写规则;组件会先从请求头中获取,获取不了的状况再从Url请求数据中获取。使用效果以下:ui
因为浏览器不方便添加header,经过Postman添加版本头来测试spa
若是服务是一个新旧版本替换的状况下则能够重写Url,把访问旧的api路径指向新的api路径。版本控制
static void Main(string[] args) { var builder = new HostBuilder() .ConfigureServices((hostContext, services) => { services.UseBeetlexHttp(o => { o.AddFilter<DefaultJsonResultFilter>(); o.LogToConsole = true; o.Port = 80; o.SetDebug(); o.LogLevel = BeetleX.EventArgs.LogType.Info; }, b => { b.UrlRewrite .Add("/api/{action}", "/api/v2/{action}"); }, typeof(Program).Assembly); }); builder.Build().Run(); }
其实组件UrlRewrite是支持运行时动态更新,只须要作个管理页便可随时调整API不一样版本的访问处理。
了解更多框架webapi功能能够访问https://github.com/IKende/FastHttpApi/wiki