zoukankan      html  css  js  c++  java
  • 关于第三方API调用的工具 WebApiClient.JIT 的使用记录

      最近项目中采用了微服务的软件体系,导致服务之间数据流通会产生一些问题,有部分需求需要服务之间互相调用接口来完成数据的流通。

      首先第一时间是想到了RPC来做数据流通,但是一个人感觉短时间内搞不定

      然后退而求其次采用了HttpClient来进行接口请求,可是哪怕封装了相关的请求代码,还是会有很多的冗余代码,频繁的调用接口从而产生一系列的问题

      这个时候WebApiClient.JIT就可以派上用场了,这是个什么东西呢?
      是个基于HttpClient的开源项目。您只需要定义c#接口并修改相关功能即可异步调用远程http接口的客户端库。

      使用起来也很简单,下面是一个demo

      新建一个webapicore项目,新建一个控制器WeatherForecastController

    代码如下:

        [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
                "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };
    
            private readonly ILogger<WeatherForecastController> _logger;
    
            public WeatherForecastController (ILogger<WeatherForecastController> logger)
            {
                _logger = logger;
            }
    
            [HttpGet("/Get")]
            public string Get (string val)
            {
                return $"{val}:{DateTime.Now.Ticks}";
            }
        }

    然后创建一个控制台应用程序

    nuget引入WebApiClient.JIT


    新建接口IWebApiClientTest

        //[TraceFilter(OutputTarget = OutputTarget.Console | OutputTarget.Debug)]
        [TraceFilter(OutputTarget = OutputTarget.Debug)]
        [HttpHost("http://192.168.2.223:8001/")] // HttpHost可以在Config传入覆盖
        public interface IWebApiClientTest: IHttpApi
        {
            [HttpGet]
            [Cache(1 * 1000)]
            Task<string> GetAsyc ([Uri] string url,string val); 
        }

    接口要求为public;

    在Program.cs代码如下

    class Program
        {
            static void Main (string[] args)
            {
                Console.WriteLine("Hello World!");
                Init();
                for (var i = 0; i < 10; i++)
                {
                    Thread.Sleep(500);
                    RequestAsync().Wait();
                }
                Console.ReadLine();
            }
            /// <summary>
            /// 初始化配置
            /// </summary>
            static void Init ()
            {
                //  注册IUserApi 配置其工厂
                HttpApi.Register<IWebApiClientTest>().ConfigureHttpApiConfig(c =>
                {
                    c.HttpHost = new Uri("http://192.168.2.223:8001/");
                    c.FormatOptions.DateTimeFormat = DateTimeFormats.ISO8601_WithMillisecond;
                    c.GlobalFilters.Add(new ApiTokenFilter(""));//添加Hearder
                });
            }
            /// <summary>
            /// 请求接口
            /// </summary>
            /// <returns></returns>
            private static async Task RequestAsync ()
            {
                var userApi = HttpApi.Resolve<IWebApiClientTest>();
                //string value = "{"name":"1","id":"2"}";
                 var about = await userApi
                   .GetAsyc("Get","余承浩");
                Console.WriteLine(about);
            }
    
        }
        class ApiTokenFilter : IApiActionFilter
        {
            private string token { get; set; }
            public ApiTokenFilter (string token)
            {
                this.token = token;
            }
            public Task OnBeginRequestAsync (ApiActionContext context)
            {
                context.RequestMessage.Headers.Add("Authorization", $"Basic {token}");
    
                return Task.FromResult<object>(null);
            }
    
            public Task OnEndRequestAsync (ApiActionContext context)
            {
                return Task.FromResult<object>(null);
            }
        }

    调用起来极为简单,堪称神器

    运行的效果如下

     因为我加了1秒钟的缓存,所以每两次请求的结果是相同的

      

  • 相关阅读:
    代码校验工具 SublimeLinter 的安装与使用
    java中写sql语句的小小细节
    搭建Hexo博客并部署到Github
    更改npm全局模块和cache默认安装位置
    笔记本连接老式显示器(VGA线+HDMI接口)
    用JSON-server模拟REST API
    使用 Feed43
    Coding.net+Myeclipse 2014 Git配置
    line-height 属性
    border-style 属性
  • 原文地址:https://www.cnblogs.com/yuchenghao/p/12797552.html
Copyright © 2011-2022 走看看