摘要

在前后端分离、Restful API盛行的年代,完美的接口文档,成了交流的纽带。在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化。下文将会演示

  • 利用Nswag如何生成Api文档

  • 利用NSwagStudio如何生成客户端代码,并且进行测试

什么是 Swagger/OpenAPI?

Swagger 是一个与语言无关的规范,用于描述 REST API。Swagger 项目已捐赠给 OpenAPI 计划,现在它被称为开放 API。这两个名称可互换使用,但 OpenAPI 是首选。它允许计算机和人员了解服务的功能,而无需直接访问实现(源代码、网络访问、文档)。其中一个目标是尽量减少连接取消关联的服务所需的工作量。另一个目标是减少准确记录服务所需的时间。

Nswag VS Swashbuckle?

.NET Swagger 实现类库有两个比较流行:

  • Swashbuckle.AspNetCore 是一个开源项目,用于生成 ASP.NET Core Web API 的 Swagger 文档。

  • NSwag 是另一个用于生成 Swagger 文档并将 Swagger UI 或 ReDoc 集成到 ASP.NET Core Web API 中的开源项目。此外,NSwag 还提供了为 API 生成 C# 和 TypeScript 客户端代码的方法。

为什么我在.NET core3.0中选择NSwag呢,NSwag比较活跃,一直在更新,功能也很强大,可以完美的代替Swashbuckle.AspNetCore具体可以参考:https://github.com/aspnet/AspNetCore.Docs/issues/4258

一、利用Nswag生成Api文档

步骤
  1. 创建Asp.NET Core Api项目,并且集成NSwag

  2. 配置项目

  3. 运行项目

创建Asp.NET Core Api项目,并且集成NSwag

我们将简单的创建一个ASP.NET core API项目。将其命名为“WebAPIwithSwg”。基于.NETcore3.0

安装nuget包NSwag.AspNetCore

接下来,在Startup.cs文件中配置Nswag服务和中间件。

在ConfigureServices方法中添加服务

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers();
  4. services.AddSwaggerDocument(); //注册Swagger 服务
  5. }
在Configure方法中添加Nswag中间件
  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. app.UseRouting();
  8. app.UseAuthorization();
  9. app.UseEndpoints(endpoints =>
  10. {
  11. endpoints.MapControllers();
  12. });
  13. app.UseOpenApi(); //添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json)
  14. app.UseSwaggerUi3();//添加Swagger UI到请求管道中(默认路由: /swagger).
  15. }
配置项目

运行项目

右键项目在浏览器中查看,查看swagger UI需要在url后面添加“/swagger”。本示例http://localhost:54117/swagger

二、利用NSwagStudio如何生成客户端代码,并且进行测试
提供GUI界面是NSwag的一大特点,只需要下载安装NSwagStudio,即可生成客户端代码。
步骤
  1. 现在安装NSwagStudio

  2. NSwagStudio配置,生成客户端代码

  3. 创建测试客户端项目

下载安装NSwagStudio

下载NSwag Studio http://rsuter.com/Projects/NSwagStudio/installer.php 安装之后打开 NSwag Studio 如图

NSwagStudio配置,生成客户端代码

选择runtime,我选择的是NETCore30,切换OpenAPI/Swagger Specification ,在Specification URL 输入你的Swagger.json路径,本示例:http://localhost:54117/swagger/v1/swagger.json输入路径之后,点击 create local copy 按钮获取json。

接下配置来生成客户端代码。我们首先选择“csharp client”复选框,然后勾选掉 “Inject Http Client via Constructor (life cycle is managed by caller)” ,最后设置下输出路径 点击生成文件(Generate Files)。步骤如下

到此客户端代码已经自动生成。

查看生成的部分代码

  1.  
  1. public async System.Threading.Tasks.Task<System.Collections.Generic.ICollection<WeatherForecast>> GetAsync(System.Threading.CancellationToken cancellationToken)
  2. {
  3. var urlBuilder_ = new System.Text.StringBuilder();
  4. urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/WeatherForecast");
  5.  
  6. var client_ = new System.Net.Http.HttpClient();
  7. try
  8. {
  9. using (var request_ = new System.Net.Http.HttpRequestMessage())
  10. {
  11. request_.Method = new System.Net.Http.HttpMethod("GET");
  12. request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
  13.  
  14. PrepareRequest(client_, request_, urlBuilder_);
  15. var url_ = urlBuilder_.ToString();
  16. request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
  17. PrepareRequest(client_, request_, url_);
  18.  
  19. var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
  20. try
  21. {
  22. var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
  23. if (response_.Content != null && response_.Content.Headers != null)
  24. {
  25. foreach (var item_ in response_.Content.Headers)
  26. headers_[item_.Key] = item_.Value;
  27. }
  28.  
  29. ProcessResponse(client_, response_);
  30.  
  31. var status_ = ((int)response_.StatusCode).ToString();
  32. if (status_ == "")
  33. {
  34. var objectResponse_ = await ReadObjectResponseAsync<System.Collections.Generic.ICollection<WeatherForecast>>(response_, headers_).ConfigureAwait(false);
  35. return objectResponse_.Object;
  36. }
  37. else
  38. if (status_ != "" && status_ != "")
  39. {
  40. var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
  41. throw new ApiException("The HTTP status code of the response was not expected (" + (int)response_.StatusCode + ").", (int)response_.StatusCode, responseData_, headers_, null);
  42. }
  43.  
  44. return default(System.Collections.Generic.ICollection<WeatherForecast>);
  45. }
  46. finally
  47. {
  48. if (response_ != null)
  49. response_.Dispose();
  50. }
  51. }
  52. }
  53. finally
  54. {
  55. if (client_ != null)
  56. client_.Dispose();
  57. }
  58. }
创建测试客户端项目

创建一个控制程序项目,命名“WebApiClient”。

把自动生成的类“WeatherForecastClient”添加到客户端项目中,然后安装Newtonsoft

最后在Main函数中添加测试代码,开始使用Api。

  1. static async System.Threading.Tasks.Task Main(string[] args)
  2. {
  3.  
  4. var weatherForecastClient = new WeatherForecastClient();
  5. //gets all values from the API
  6. var allValues = await weatherForecastClient.GetAsync();
  7. Console.WriteLine("Hello World!");
  8. }

运行客户端应用程序,进行调用api

当然如果需要调试api项目内部代码,可以设置断点,进入一步一步的调试

小结:NSwag 功能远不止这些,本篇文章演示了如何生成api文档和自动生成的api客户端代码方便我们调试,也可以作为对应的sdk。

参考:微软官方文档---https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-nswag?view=aspnetcore-2.2&tabs=visual-studio

.NET Core 3.0 使用Nswag生成Api文档和客户端代码的更多相关文章

  1. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  2. .Net Core 3.1 WebApi使用Swagger生成Api文档

    用swagger生成Api文档 1.安装Swashbuckle.AspNetCore 右键单击"解决方案资源管理器" > "管理 NuGet 包"中的项目 ...

  3. asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

    asp.net core中使用Swashbuckle.AspNetCore(swagger)生成接口文档 Swashbuckle.AspNetCore:swagger的asp.net core实现 项 ...

  4. Codeigniter项目使用phpDocumentor生成api文档

    前言 运行环境: vagrant 2.2.4 virtualbox 6.0 box bento/ubuntu-16.04 (Apache 2.4.18 + Mysql 5.7.26 + PHP 5.6 ...

  5. 利用sphinx为python项目生成API文档

    sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...

  6. 使用bee自动生成api文档

    beego中的bee工具可以方便的自动生成api文档,基于数据库字段,自动生成golang版基于beego的crud代码,方法如下: 1.进入到gopath目录的src下执行命令: bee api a ...

  7. 试试使用 eolinker 扫描 GitLab 代码注释自动生成 API 文档?

    前言: 一般写完代码之后,还要将各类参数注解写入API文档,方便后续进行对接和测试,这个过程通常都很麻烦,如果有工具可以读取代码注释直接生成API文档的话,那会十分方便. 此前一直都是在使用eolin ...

  8. SpringBoot系列: 使用 Swagger 生成 API 文档

    SpringBoot非常适合开发 Restful API程序, 我们都知道为API文档非常重要, 但要维护好难度也很大, 原因有: 1. API文档如何能被方便地找到? 以文件的形式编写API文档都有 ...

  9. 使用sphinx快速为你python注释生成API文档

    sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...

随机推荐

  1. GridSplitter

    <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <Colum ...

  2. python3 requests_html 爬取智联招聘数据(简易版)

    PS重点:我回来了-----我回来了-----我回来了 1. 基础需要: python3 基础 html5 CS3 基础 2.库的选择: 原始库  urllib2  (这个库早些年的用过,后来淡忘了) ...

  3. next day

    #_*_coding:utf_*_#!/usr/bin/env python now_day=input('当前某一天:').format('%Y.%m.%d')%%输入日期(年.月.日) year= ...

  4. django-模板之if语句(九)

  5. 在ASP.NET Core中编写合格的中间件

    这篇文章探讨了让不同的请求去使用不同的中间件,那么我们应该如何配置ASP.NET Core中间件?其实中间件只是在ASP.NET Core中处理Web请求的管道.所有ASP.NET Core应用程序至 ...

  6. Mongo 导出为csv文件

    遇到需要从Mongo库导出到csv的情况,特此记录. 先贴上在mongo目录下命令行的语句: ./mongoexport -h 10.175.54.77 -u userName -p password ...

  7. xss代码集

    </script>"><script>prompt(1)</script> </ScRiPt>"><ScRiPt& ...

  8. [Nginx]Ubuntu18.04 安装配置Nginx1.13.6+FastDFS

    一. 安装fastdfs依赖包 1. 解压缩libfastcommon-master.zip 2. 进入到libfastcommon-master的目录中 3. 执行 ./make.sh 4. 执行 ...

  9. [考试反思]0829NOIP模拟测试33:仰望

    ,160,160,160... 凑和吧,但是莫名开心. 然而这次没有什么想讲的. T1,等比数列求和,XX题,水极,20分钟找规律,找错,快速幂又打错,没检查,10分. T2,想复杂了,想了很久效率很 ...

  10. 2019.11.11&12题解

    Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...