首页 > 其他分享 >ABP项目添加第三方API客户端代理

ABP项目添加第三方API客户端代理

时间:2025-01-10 10:23:11浏览次数:1  
标签:API Contracts ABP Application Client typeof using public 客户端

第三方API客户端代理

启动模板中包含HttpApi.Client​项目,这个项目是应用程序自己的客户端代理,用于提供给其他应用访问。例如Blazor WebAssembly使用HttpApi.Client​项目生成的API客户端代理访问应用程序的服务。

本文介绍在应用程序中如何访问其他应用的API。

远程应用服务接口

新建.Application.Contracts.Client​项目。此项目包含远程应用服务的interface。

添加以下两个NuGet包:

Install-Package Volo.Abp.Ddd.Application.Contracts
Install-Package Refit.HttpClientFactory

添加模块类<ProjectName>ApplicationContractsClientModule​:

using Volo.Abp.Application;
using Volo.Abp.Modularity;

namespace LearnAbp;

[DependsOn(
    typeof(AbpDddApplicationContractsModule)
)]
public class LearnAbpApplicationContractsClientModule : AbpModule
{
}

添加Services​文件夹,在其中定义远程应用服务interface。例如:

using Refit;

namespace LearnAbp.Application.Contracts.Client.Services
{
    public interface IMesApiService
    {
        [Get("/autoPas/Report")]
        Task SendReportMessageAsync(string text);
    }
}
  • [Get("/autoPas/Report")]​是Refit中的特性,表示向/autoPas/Report​端点发起一个GET请求。

然后在.Application.Contracts​项目中引用.Application.Contracts.Client​项目,并在其模块类中添加对<ProjectName>ApplicationContractsClientModule​的依赖:

[DependsOn(
    typeof(LearnAbpDomainSharedModule),
    typeof(LearnAbpApplicationContractsClientModule),
	...
)]
public class LearnAbpApplicationContractsModule : AbpModule
{
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        LearnAbpDtoExtensions.Configure();
    }
}

远程应用服务代理

新建.Application.Client​项目,此项目使用Refit动态生成远程应用服务代理。

.Application.Client​项目引用.Application.Contracts.Client​项目,添加以下两个NuGet包:

Install-Package Volo.Abp.Http.Client
Install-Package Refit.HttpClientFactory

添加模块类<ProjectName>ApplicationClientModule​:

using LearnAbp.Application.Contracts.Client.Services;
using Microsoft.Extensions.DependencyInjection;
using Refit;
using Volo.Abp.Modularity;

namespace LearnAbp;

[DependsOn(
    typeof(LearnAbpApplicationContractsClientModule)
)]
public class LearnAbpApplicationClientModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        ConfigureRefit(context);
    }

    private static void ConfigureRefit(ServiceConfigurationContext context)
    {
        var configuration = context.Services.GetConfiguration();

        context.Services.AddRefitClient<IMesApiService>()
            .ConfigureHttpClient(httpClient =>
            {
                if (configuration["RemoteServices:Default:BaseUrl"] is string url)
                {
                    httpClient.BaseAddress = new Uri(url);
                }
            });
    }
}

然后在.Application​项目中引用.Application.Client​项目,并在其模块类中添加对<ProjectName>ApplicationClientModule​的依赖,例如:

[DependsOn(
    typeof(LearnAbpDomainModule),
    typeof(LearnAbpApplicationContractsModule), 
    typeof(LearnAbpApplicationClientModule),
	...
    )]
public class LearnAbpApplicationModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
		...
    }
}

端点配置

appsettings.json​中的RemoteServices​节被用于获取默认远程服务地址。简单的配置如下:

{
  "RemoteServices": {
    "Default": {
      "BaseUrl": "http://localhost:53929/"
    } 
  } 
}

使用

使用只需注入远程应用服务interface。

public class MyService : ITransientDependency
{
    private readonly IMesApiService _mesApi;

    public MyService(IMesApiService mesApi)
    {
        _mesApi = mesApi;
    }

    public async Task DoIt()
    {
        await _mesApi.SendReportMessageAsync("ok");
    }
}

标签:API,Contracts,ABP,Application,Client,typeof,using,public,客户端
From: https://www.cnblogs.com/yada/p/18663453

相关文章

  • API 风格选对了,文档写好了,项目就成功了一半!
    在前后端开发中,API文档和API风格设计是提高开发效率、减少沟通成本、确保系统稳定性的关键环节。一个清晰、易用的API文档可以帮助前端开发者快速理解接口的使用方法,而完善的测试则能尽早发现潜在问题,避免上线后出现故障。接下来,我们将从API风格设计和API文档两个方面,详细探......
  • Windows Sockets(Winsock) 是微软在 Windows 操作系统中提供的一组 API(应用程序接口),用于
    WindowsSockets(简称Winsock)是什么?WindowsSockets(Winsock)是微软在Windows操作系统中提供的一组API(应用程序接口),用于实现网络通信协议的标准。它是基于套接字(socket)模型的,允许开发者在Windows平台上通过网络进行通信。通过Winsock,程序可以进行各种网络操作,如建立TCP/IP......
  • 大疆上云API连接遥控器和无人机
    文章目录1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下4、订阅无人机或遥控器的主题信息4.1、订阅无人......
  • API接口详解及其在电子商务中的应用研究
    API(应用程序编程接口)是现代软件开发中的重要组成部分,它们允许不同软件系统之间进行通信和数据交换。特别是在电子商务领域,API的应用极大地提升了系统的互操作性、可扩展性和灵活性。本文将详细介绍API接口的定义、工作原理、分类,并探讨其在电子商务中的具体应用。一、API接口的定......
  • BAPI
    预制发票:BAPI_INCOMINGINVOICE_PARKDATA:ls_headerTYPEbapi_incinv_create_header,lt_itemdataTYPETABLEOFbapi_incinv_create_item,ls_itemdataTYPEbapi_incinv_create_item,lt_taxdataTYPETABLEOFbapi_incinv_creat......
  • 深度剖析淘宝 API:《从接入到实战的全流程技术指南》
    目录淘宝详情接口概述商品信息获取与展示用户体验优化与转化率提升数据监控、分析与优化调整     1.接口定义与功能淘宝详情接口是淘宝开放平台提供的一种API接口,用于获取商品详细信息。通过调用该接口,可以获取商品的标题、价格、图片、描述、规格等......
  • 示例代码对API接口的作用
    引言在现代软件开发中,API(应用程序编程接口)扮演着至关重要的角色。API允许不同的软件系统之间进行通信和数据交换,从而实现功能的扩展和应用的集成。示例代码作为API文档的重要组成部分,对开发者理解和使用API接口具有显著的作用。本文将详细探讨示例代码在API接口中的作用,并通过实......
  • k8s api请求怎么请求
    在Kubernetes中,API请求的处理主要由APIServer负责。以下是Kubernetes处理API请求的基本流程:###APIServer的角色-**核心组件**:APIServer是Kubernetes控制平面的核心组件,负责接收和处理来自客户端的所有请求。-**请求入口**:所有对Kubernetes集群的操作请求都......
  • webapi 集成 log4net 写入 ElasticSearch
    log4net.config<log4net><appendername="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender"><!--定义文件存放位置--><filevalue="log/"/><appendToFilevalue="true"......
  • 设计一篇利用python爬虫获取1688详情API接口的长篇软文
    在当今数字化浪潮席卷全球的背景下,数据已成为企业、研究机构乃至个人获取信息、洞察趋势、做出决策的关键资源。而1688作为国内领先的B2B电子商务平台,汇聚了海量的供应商和采购商,其商品详情数据蕴含着巨大的商业价值和研究意义。如何高效、便捷地获取这些数据?Python爬虫技......