1.前言

  微服务架构随之而来的前后端彻底分离,且服务众多,无论是前后端对接亦或是产品、运营翻看,一个现代化、规范化、可视化、可尝试的文档是多么重要,所以我们这节就说说swagger。

  Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。

  swagger优势:

  1)后端开发人员,不在重复的用wiki或word不断改来改去;

  2).net core集成简单,无侵入性,开发人员只需要使用.net自身的注释即可;

2.实战

  新建一个.net core3.1项目,nuget安装Swashbuckle.AspNetCore包最新版本

  DI注入

  

 services.AddSwaggerGen(e =>
{
e.SwaggerDoc("v1",
new Microsoft.OpenApi.Models.OpenApiInfo()
{
Title = "MySwaggerService1 API",//文档标题
Version = "v1"//文档版本
}
);
//e.OperationFilter<AddAuthTokenFilter>();
e.IncludeXmlComments(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MySwaggerService1.xml"));//swagger会自动生成文档xml文件,指定位置来加载
//e.IncludeXmlComments(System.IO.Path.Combine(Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationBasePath, "xxxxx.xml"));//注释的这里,swagger会为每个类库都生成类库名.xml的配置文件,我这里只有一个简单的demo,所以不用
});

添加中间件

app.UseSwagger()
.UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"/swagger/v1/swagger.json", "MySwaggerService1");
});

项目右键属性=》生成,将debug和release配置下,输出=》输出路径=》xml文档位置,勾选,默认即可。

写一个get接口,写一个post接口。

  [Route("api/[controller]")]
[ApiController]
public class DemoController : ControllerBase
{
/// <summary>
/// 我的接口
/// </summary>
/// <param name="no">我的参数</param>
/// <returns></returns>
[ProducesResponseType(typeof(string), (int)HttpStatusCode.OK)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.BadRequest)]
[HttpGet("my")]
public async Task<IActionResult> My([FromQuery] string no)
{
return Ok("hello docker");
} /// <summary>
/// 我的第二个接口
/// </summary>
/// <param name="queryModel"></param>
/// <returns></returns>
[ProducesResponseType(typeof(List<MyViewModel>), (int)HttpStatusCode.OK)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.BadRequest)]
[HttpPost("query/my")]
public async Task<IActionResult> PostMy([FromBody] MyQueryModel queryModel)
{
var res = new List<MyViewModel>();
res.Add(new MyViewModel() {
Gid = "1",
MyList = new List<int>() { 1,2,3}
});
return Ok(res);
}
}

启动后:地址 http://localhost:xxxx/swagger.

到此,.net core集成swagger结束。

3.swagger切换

  上文这个服务的在线文档已经好了,如果10个服务的话,想要查看,就要打开10个地址,而微服务系统可远不止10个那么少,所以我们要用一个统一地址,可以选择服务进行自由切换。配置如下:

  我们已经建立了一个服务,并且配置好了swagger,我们在新建一个一样的服务,并且一样配置好swagger,并且写2个接口

  再新建一个服务,做为swagger统一入口服务,一样引入nuget包,DI注入也是一样的,只需要在添加中间件的时候利用swagger的SwaggerUIOptions的扩展SwaggerEndpoint,就可以集中配置,如代码

  

 var apis = new List<string>();
apis.Add("http://localhost:5001");
apis.Add("http://localhost:5002"); app.UseSwagger()
.UseSwaggerUI(c =>
{
apis.ForEach(m =>
{
c.SwaggerEndpoint($"{m}/swagger/v1/swagger.json", m);
});
});

然后,三个服务同时启动,打开这个统一文档服务的swagger地址如下图:

看右上角,可以切换服务定义了,这回方便了。回到统一服务的,中间件配置的代码上,因为人家是endpoint,是地址,所以我们只能如此简陋的配置,在切换地方显示的是地址,真实项目中,这样肯定不行的,首先开发人员要知道所有服务地址是不显示的,其次通过地址切换,你也不知道服务是干啥的,所以实际项目中,我们是利用网关+consul+配置中心的地址规则,来集中配置。如下图

最后的统一文档服务的目标切换,就是服务名称

全文结束。。

微服务系列之Api文档 swagger整合的更多相关文章

  1. 微服务如何聚合 API 文档?这波秀~

    今天这篇文章介绍一下微服务如何聚合Swagger实现接口文档管理. 文章目录如下: 为什么需要聚合? 微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界 ...

  2. WebApi生成在线API文档--Swagger

    1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...

  3. 微服务&#183;API文档

    阅文时长 | 3.92分钟 字数统计 | 2754.05字符 主要内容 | 1.什么是API文档 2.API文档的使用 3.声明与参考资料 『微服务·API文档』 编写人 | SCscHero 编写时 ...

  4. swagger在线api文档搭建指南,用于线上合适么?

    在上一篇文章中,我们讲解了什么是 api,什么是 sdk: https://www.cnblogs.com/tanshaoshenghao/p/16217608.html 今天将来到我们万丈高楼平地起 ...

  5. Swagger UI教程 API 文档神器 搭配Node使用

    ASP.NET Web API 使用Swagger生成在线帮助测试文档 Swagger 生成 ASP.NET Web API 前言 swagger ui是一个API在线文档生成和测试的利器,目前发现最 ...

  6. 运用swagger编写api文档

    一.什么是swagger 随着互联网技术的发展,前后端技术在各自的道路上越走越远,他们之间的唯一联系变成了api接口,api接口文档编程了前后端人员的纽带,而swagger就是书写api文档的一款框架 ...

  7. 互联网常见Open API文档资源

    原文地址:http://blog.sina.com.cn/s/blog_4d8713560100y272.html 所谓的开放API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网 ...

  8. Spring Boot中使用Swagger2构建API文档

    程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...

  9. 添加swagger api文档到node服务

    swagger,一款api测试工具,详细介绍参考官网:http://swagger.io/ ,这里主要记录下怎么将swagger api应用到我们的node服务中: 1.任意新建node api项目, ...

随机推荐

  1. C++ 模板和泛型编程(掌握Vector等容器的使用)

    1. 泛型 泛型在我的理解里,就是可以泛化到多种基本的数据类型,例如整数.浮点数.字符和布尔类型以及自己定义的结构体.而容器就是提供能够填充任意类型的数据的数据结构.例如vector就很类似于pyth ...

  2. Image-Text Matching

    重要性和意义: Image-text matching has received a large amount of interest since it associates different mo ...

  3. 函数式编程思想概述和冗余的Runnable代码

    函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方法 相对而言,面向对象过分强调必须通过对象的形式来做事情,而函数式的思想是尽量忽略复杂的面向对象的复杂语法--是强调做什么而不是以什么 ...

  4. Object类和toString方法 --和Object类的equals方法

    一,Object类概述:Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类构造方法:pulic Object()在面向对象中,子类要访问父类的无参构造方 ...

  5. 常用源&配置

    ubuntu16.04 阿里 cp /etc/apt/sources.list /etc/apt/sources.list.orgin && \ echo "\ deb ht ...

  6. 边缘计算 KubeEdge+EdgeMash

    简介 KubeEdge是面向边缘计算场景.专为边云协同设计的业界首个云原生边缘计算框架,在 Kubernetes 原生的容器编排调度能力之上实现了边云之间的应用协同.资源协同.数据协同和设备协同等能力 ...

  7. 线程池ThreadPoolExector核心ctl, execute, addWorker, reject源码分析

    线程池核心方法execute()解析: public void execute(Runnable command) {//#1 if (command == null) throw new NullP ...

  8. Reading configuration from: /usr/local/src/zookeeper/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg

    2021-04-25 00:15:48,112 [myid:] - INFO  [main:QuorumPeerConfig@174] - Reading configuration from: /u ...

  9. Seata-初体验以及避坑

    Seata是什么 这里引用官方解释 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用 ...

  10. JavaDoc文档生成详细操作

    JavaDoc练习 JavaDoc是一种将注释生成HTML文档的技术,是用来生成自己API文档的. 参数信息 /* @author 作者名 @version 版本号 @since 知名最早需要使用的j ...