NSwag教程:使用CLI工具生成服务代理客户端代码

NSwag教程:使用CLI工具生成服务代理客户端代码

NSwag NSwag 项目地址: https://gitcode.com/gh_mirrors/nsw/NSwag

前言

在现代分布式系统开发中,客户端应用经常需要与第三方服务进行交互。NSwag作为.NET生态中强大的Swagger/OpenAPI工具链,能够帮助我们快速生成强类型的客户端代理代码,显著提升开发效率。本文将详细介绍如何使用NSwag CLI工具生成服务客户端代理代码。

场景假设

假设你加入了一个大型项目团队,需要开发一个客户端应用(可能是移动端、桌面端或Web应用),该应用需要集成一个第三方服务。这个第三方服务提供了完整的OpenAPI规范文档,但你对服务内部实现没有深入了解和修改权限。

准备工作

环境要求

  1. NSwag CLI工具:这是生成客户端代码的核心工具
  2. Visual Studio Code(可选):推荐安装OpenAPI/Swagger编辑器扩展,便于查看和验证API文档
  3. .NET 5.0+运行时:确保你的开发环境已安装

注意事项

  • 如果使用ZIP方式安装NSwag遇到问题,建议使用Chocolatey或MSI安装包
  • 执行命令时可能需要指定运行时版本,如:nswag version /runtime:Net50
  • 本文示例使用公开的Swagger Petstore API作为演示

生成客户端代码的两种方式

方式一:使用现有配置快速生成

  1. 准备NSwag配置文件:使用类似[sample.nswag]的配置文件
  2. 创建项目目录结构
    • MainApp/Services/[YourRemoteService]:存放服务客户端代码
    • MainApp/Contracts/[YourRemoteService]:存放接口和DTO定义
  3. 获取API文档
    • 如果服务提供公开的OpenAPI端点,可直接使用
    • 否则下载API文档到本地
  4. 执行生成命令
    nswag run sample.nswag /runtime:Net50
    
  5. 整合生成代码:将输出文件放入对应目录
  6. 更新依赖注入配置:检查是否需要更新服务注册

方式二:自定义配置生成

  1. 创建自定义配置文件:基于以下模板修改
  2. 关键配置项说明
    • documentGenerator.fromDocument.url:指定OpenAPI文档位置(URL或本地路径)
    • codeGenerators.openApiToCSharpClient.className:设置生成的服务类名
    • codeGenerators.openApiToCSharpClient.namespace:设置命名空间
    • generateContractsOutput:设为true可分离接口和DTO定义
  3. 执行生成命令
    nswag run custom.nswag /runtime:Net50
    
  4. 整合生成代码:同上

NSwag配置详解

以下是一个完整的配置示例,包含主要参数的说明:

{
    "runtime": "Net50",
    "documentGenerator": {
        "fromDocument": {
            "url": "YOUR_OPENAPI_SPEC_LOCATION_HERE"
        }
    },    
    "codeGenerators": {
        "openApiToCSharpClient": {
            "generateClientClasses": true,
            "generateClientInterfaces": true,
            "generateDtoTypes": true,
            "injectHttpClient": true,
            "clientBaseClass": "MainApp.Services.BaseService",
            "generateContractsOutput": true,
            "contractsNamespace": "MainApp.Services.SampleService.Contracts",
            "className": "SampleService",
            "namespace": "MainApp.Services.SampleService",
            "operationGenerationMode": "MultipleClientsFromOperationId",
            "generateSyncMethods": false,
            "generateResponseClasses": true
        }
    }
}

关键参数说明

  1. 代码生成选项

    • generateClientClasses:是否生成客户端类
    • generateClientInterfaces:是否生成客户端接口
    • generateDtoTypes:是否生成DTO类型
  2. HTTP客户端配置

    • injectHttpClient:是否注入HttpClient
    • disposeHttpClient:是否自动释放HttpClient
  3. 命名空间与类名

    • namespace:设置主命名空间
    • contractsNamespace:设置合约命名空间
    • className:设置生成的主类名
  4. 操作模式

    • operationGenerationMode:操作方法生成模式
    • generateSyncMethods:是否生成同步方法

最佳实践建议

  1. 版本控制:将API文档与生成的代码一起纳入版本控制
  2. 目录结构:保持清晰的目录结构,分离客户端实现和合约定义
  3. 依赖注入:利用.NET的DI容器管理服务客户端生命周期
  4. 异常处理:配置exceptionClass参数实现统一异常处理
  5. 异步优先:建议只生成异步方法(generateSyncMethods: false)

常见问题解决

  1. 运行时版本不匹配:确保NSwag运行时与项目目标框架一致
  2. 代码生成失败:检查OpenAPI文档是否符合规范
  3. 命名冲突:调整operationGenerationMode参数解决
  4. DTO属性缺失:确认requiredPropertiesMustBeDefined设置

通过本文介绍的方法,你可以快速为任何符合OpenAPI规范的服务生成强类型客户端代码,大大提高开发效率并减少手动编写容易出错的样板代码。

NSwag NSwag 项目地址: https://gitcode.com/gh_mirrors/nsw/NSwag

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁通彭Mercy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值