在应用服务中API更新是很普遍的事情,为了服务良好地运作很多时候需要新旧版本同时兼容;为了应对这一系列的需求FastHttpApi在新版中强化了Url重写机制来支持API访问版本控制,由原来固定的重写规则调整成支持动态数据的重写规则,主要支持域名,header和querystring等不同值进一个重写的定义。接下来讲解如何通过FastHttpApi来控制不同版本的API访问

API示例

复制代码
    [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

 

其实有很多时候希望不改变Url路径的情况来对不同版本来进行一访问,这样在使用调整上就比较方便简单。FastHttpApi支持通过域名,请求头和请求参数来应对不同情况的重写,这样就可以让调用者无法关注访问的路径统一设置相关参数即可。

依据域名重写

组件支持依据域名来重写Url,针对这情况可以定义一个V2.beetlex.com来访问/Api/v2/hello,在程序启动的时候加入一个重写

复制代码
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或QueryString值来重写

其实在Header中添加则是对整个Url是没有任何影响的,组件可以这样定义这个重写规则