ABP-VNEXT 学习笔记(五)动态API客户端

本篇内容需要结合上一篇  https://www.cnblogs.com/fei686868/p/16625289.html

官方地址:https://docs.abp.io/zh-Hans/abp/latest/API/Dynamic-CSharp-API-Clients

在上一篇中,我们讲到了自动生成api

本篇内容,讲述如何动态生成API客户端,简单的说,就是通过http请求获取数据。但此处,我们是依赖接口层实现,并非自己一个个写http请求。

该功能适用于 微服务场景下。

 

我们再web2项目中,只引入接口层 AbpAPI.ApplicationContract。 这个是跟上一篇中web1需要引入 实现层不一样的。

需要引入:Volo.Abp.Http.Client   这个包

using AbpAPI;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Autofac;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;

namespace AbpAPIWeb2
{
    [DependsOn(typeof(AbpAPIApplicationContractModule))]  //注意,此处引入的是接口层
    [DependsOn(typeof(AbpAspNetCoreMvcModule))]
    [DependsOn(typeof(AbpAutofacModule))]
    [DependsOn(typeof(AbpHttpClientModule))] //添加依赖
    public class AbpAPIWeb2Module : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            base.ConfigureServices(context);

            //创建动态客户端代理,就这么一句户搞定
            context.Services.AddHttpClientProxies(
                typeof(AbpAPIApplicationContractModule).Assembly
            );

        }

        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            
            var app = context.GetApplicationBuilder();
        
            base.OnApplicationInitialization(context);
        }
    }
}

就上面代码中一句户搞定:

  //创建动态客户端代理,就这么一句户搞定
            context.Services.AddHttpClientProxies(
                typeof(AbpAPIApplicationContractModule).Assembly
            );

多个接口层,就写多个

应用上,跟我们日常调用接口方法,没啥区别,中间的http请求过程,abp都处理了

如:

        public IStudentService studentService { get; set; }


        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }
        public async Task<string> GetName()
        {
            string name = await studentService.GetNameAsync();

            return name;
        }

 

这样就实现了api的调用。

这里面有个注意点需要特别说明一下,经过测试发现:
方法必须是异步的,如果同步的方法,则此处方法调取后,返回的都是null,至于为什么,需要去研究abp源码了。

 

 

为什么需要引入接口层,而不是直接写http请求呢,其实大多数微服务框架也是这么操作的。

引入共同的接口层

1:为了约束,做好契约。使代码更规范更容易维护。

2:简洁。在使用时直接调用对方方法,无需配置一大堆的url

 

附上示例代码:https://gitee.com/fei686868/abpapisample/tree/master/AbpAPISolution

 

更多分享,请大家关注我的个人公众号:

 

posted @ 2022-08-25 18:24  黄明辉  阅读(726)  评论(0编辑  收藏  举报