微服务系列之Api文档 swagger整合
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整合的更多相关文章
- 微服务如何聚合 API 文档?这波秀~
今天这篇文章介绍一下微服务如何聚合Swagger实现接口文档管理. 文章目录如下: 为什么需要聚合? 微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界 ...
- WebApi生成在线API文档--Swagger
1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...
- 微服务·API文档
阅文时长 | 3.92分钟 字数统计 | 2754.05字符 主要内容 | 1.什么是API文档 2.API文档的使用 3.声明与参考资料 『微服务·API文档』 编写人 | SCscHero 编写时 ...
- swagger在线api文档搭建指南,用于线上合适么?
在上一篇文章中,我们讲解了什么是 api,什么是 sdk: https://www.cnblogs.com/tanshaoshenghao/p/16217608.html 今天将来到我们万丈高楼平地起 ...
- Swagger UI教程 API 文档神器 搭配Node使用
ASP.NET Web API 使用Swagger生成在线帮助测试文档 Swagger 生成 ASP.NET Web API 前言 swagger ui是一个API在线文档生成和测试的利器,目前发现最 ...
- 运用swagger编写api文档
一.什么是swagger 随着互联网技术的发展,前后端技术在各自的道路上越走越远,他们之间的唯一联系变成了api接口,api接口文档编程了前后端人员的纽带,而swagger就是书写api文档的一款框架 ...
- 互联网常见Open API文档资源
原文地址:http://blog.sina.com.cn/s/blog_4d8713560100y272.html 所谓的开放API(OpenAPI)是服务型网站常见的一种应用,网站的服务商将自己的网 ...
- Spring Boot中使用Swagger2构建API文档
程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...
- 添加swagger api文档到node服务
swagger,一款api测试工具,详细介绍参考官网:http://swagger.io/ ,这里主要记录下怎么将swagger api应用到我们的node服务中: 1.任意新建node api项目, ...
随机推荐
- 【计算机系统基础1】gdb、gcc简易使用指南
目录 1. 基本实验工具的使用 1.1GCC 在IA-32+LINUX平台 基本的GCC 命令 一些其他选项 1.2objdump 1.3gdb 启动gdb 调试工具 设置断点 启动程序运行 查看程序 ...
- Redis 渐进集群介绍
redis 凭借着强大的功能和可靠的稳定性,应用场景越来越广.逐渐成为软件开发工程师必备的技能之一. 本篇文章,暂不做基本功能的介绍.直接教大家如何部署redis集群. 集群演进主要分为2部分. 一. ...
- PaddleOCR系列(一)--环境搭建
官方建议使用他们的docker镜像,所以我们按照他们建议的来. 环境搭建其实很简单,其实不需要在宿主机上配置cuda及cudnn,只需要保证宿主机上的cuda大于docker镜像中的就可以了. 所以我 ...
- Mac安装 Scrapy 报错 No local packages or working download links found for incremental>=16.10.1
证书原因: wget http://curl.haxx.se/ca/cacert.pem mv cacert.pem ca-bundle.crt sudo mkdir -p /etc/pki/tls/ ...
- Java双重校验单例模式详解
单例模式双重检测java实现: public class Singleton { private volatile static Singleton instance = null; //#1 pub ...
- ooday02构造方法_this_引用类型数组
笔记: 构造方法:构造函数.构造器.构建器---------复用给成员变量赋初值代码 作用:给成员变量赋初始值 与类同名,没有返回值类型(连void都没有) 在创建(new)对象时被自动调用 若自己不 ...
- 论文阅读 TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS
14 TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS link:https://scholar.google.com.hk/sc ...
- 基于ABP实现DDD--仓储实践
由于软件系统中可能有着不同的数据库,不同的ORM,仓储思想的本质是解耦它们.在ABP中具体的实现仓储接口定义在领域层,实现在基础设施层.仓储接口被领域层(比如领域服务)和应用层用来访问数据库,操作 ...
- SpringBoot数据库管理 - 用flyway对数据库管理和迁移
上文介绍了Liquibase,以及和SpringBoot的集成.除了Liquibase之外,还有一个组件Flyway也是经常被使用到的类似的数据库版本管理中间件.本文主要介绍Flyway, 以及Spr ...
- Python基础之字符串和编码
字符串和编码 字符串也是一种数据类型,但是字符串比较特殊的是还有个编码问题. 因为计算机自能处理数字,如果徐娅处理文本,就必须先把文本转换为数字才能处理,最早的计算机子设计时候采用8个比特(bit)作 ...