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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章