工作中一个公司会有很多个项目,项目之间的交互经常需要编写 API 来实现,但是编写文档是一件繁琐耗时的工作,并且随着 API 的迭代,每次都需要去更新维护接口文档,很多时候由于忘记或者人员交替的愿意造成接口文档与代码不一致。

  在实际工作中,有的公司会有强制的代码规范,要求代码必须要有注释以及字段、方法、类、接口等的命名规范。但是很多小公司是不存在的,即使按照了规范编写代码也还是需要额外去维护一个文档(word、Excel、markdown等方式),用来提供给其他系统或前端的调用,非常耗时。

  那么有什么方法可以快速生成文档并且使其跟随代码的迭代而变化呢?答案是可以是用Swagger,Swagger工具可以帮助完成生成和维护API文档的工作,确保文档在API发展过程中保持最新状态。

  Swagger官网主要提供了几种开源工具:Swagger Codegen可以通过为API生成服务器或客户端代码;Swagger UI提供一个可视化的UI页面展示使得接口的调用方等人可以在该页面对相关接口进行查阅和做一些简单的请求;Swagger Editor类似于markendown编辑器的编辑Swagger描述文件的编辑器,该编辑支持实时预览描述文件的更新效果;Swagger Inspector 是一个可以对接口进行测试的在线版的postman。比在Swagger UI里面做接口请求,会返回更多的信息,也会保存你请求的实际请求参数等数据;Swagger Hub集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。具体可查看官网:https://swagger.io/

  这里我们只展示在Asp.net core 中 如何 集成 Swagger。

  新建.net core 2.2 的Api项目SWagger.Api,首先在asp.net core中使用Swagger我们需要引入Nuget包 Swashbuckle.AspNetCore。

Install-Package Swashbuckle.AspNetCore

  新建控制器UserController,并且实现Get、Put、Post、Delete方法,方法需要指定具体的属性和添加必要的注释。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; namespace Swagger.Api.Controllers
{
/// <summary>
/// 用户接口
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class UserController : Controller
{
/// <summary>
/// 获取所有用户的信息
/// </summary>
/// <returns>所有用户</returns>
[HttpGet]
[Route("")]
public IActionResult Get()
{
return Json(new { Id=,Name="Jesen",Email="jesen@qq.com" });
} /// <summary>
/// 通过用户Id获取用户信息
/// </summary>
/// <remarks>
/// id必须传值
/// </remarks>
/// <param name="id">用户Id</param>
/// <returns>用户信息</returns>
/// <response code="200">返回用户信息</response>
/// <response code="400">如果id为空</response>
[HttpGet]
[Route("{id}")]
[ProducesResponseType()]
[ProducesResponseType()]
public async Task<IActionResult> Get(int? id)
{
if (id == null) return BadRequest(); return Json(new { Id = id, Name = "Jesen", Email = "jesen@qq.com" });
} /// <summary>
/// 添加用户
/// </summary>
/// <param name="user">User对象Json</param>
/// <response code="200">返回用户信息</response>
/// <response code="400">错误</response>
[HttpPost]
[ProducesResponseType()]
[ProducesResponseType()]
public async Task<IActionResult> Post([FromBody] User user)
{
return Ok(user);
} /// <summary>
/// 更改用户
/// </summary>
/// <param name="user">User对象Json</param>
/// <returns></returns>
[HttpPut]
public async Task<IActionResult> Put([FromBody] User user)
{
return Ok(user);
} /// <summary>
/// 通过用户Id删除用户
/// </summary>
/// <param name="id">用户Id</param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
{
return Ok();
}
}
}

  可以看到和我们平常编写接口差不多,不需要做其他的工作,在.net core中集成Swagger需要做的仅仅是在Startup中注入它并且添加该中间件。

public void ConfigureServices(IServiceCollection services)
{
//注册Swagger生成器,定义一个和多个Swagger 文档
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info {
Title = "用户系统接口",
Version = "v1",
Description = "用户系统对外接口",
TermsOfService = "None",
Contact = new Contact
{
Name = "Jesen",
Email = string.Empty,
Url = "http://www.cnblogs.com/jesen1315/"
},
License = new License
{
Name = "许可证名字",
Url = "http://www.cnblogs.com/jesen1315/"
}
}); // 为 Swagger JSON and UI设置xml文档注释路径
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
var xmlPath = Path.Combine(basePath, "Swagger.Api.xml");
c.IncludeXmlComments(xmlPath);
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
} //启用中间件服务生成Swagger作为JSON终结点
app.UseSwagger();
//启用中间件服务对swagger-ui,指定Swagger JSON终结点
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Swagger.Api V1");
}); //app.UseHttpsRedirection();
app.UseMvc();
}

  至此,运行项目就可以在浏览器上访问并简单调试了。

  是不是很简单,Swagger还可以在生成的时候为项目生成xml文档

 

Asp.Net Core集成Swagger的更多相关文章

  1. asp.net core 集成swagger ui

    什么是Swagger? 说swagger 之前,我们先说一下OpenApi 规范. OpenApi 是一种和语言无关的用于描述RESTAPIs 接口功能的一种规范,对RESTAPIs 接口的描述包括: ...

  2. ABP官方文档翻译 6.2.1 ASP.NET Core集成

    ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...

  3. asp.net core 集成 log4net 日志框架

    asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...

  4. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...

  5. ASP.NET WebAPI 集成 Swagger 启用 OAuth 2.0 配置问题

    在 ASP.NET WebAPI 集成 Swagger 后,由于接口使用了 IdentityServer 做的认证,调试起来很不方便:看了下 Swashbuckle 的文档 ,是支持 OAuth2.0 ...

  6. Asp.Net Core 集成 Hangfire 配置使用 Redis 存储

    Hangfire 官方支持 MSSQL 与 Redis(Hangfire.Pro.Redis) 两种 ,由于我的数据库是 MYSQL ,粗略查询了一下文档,现在对 .NET Core 支持的并不够好, ...

  7. asp.net core集成MongoDB

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...

  8. asp.net core集成CAP(分布式事务总线)

    一.前言 感谢杨晓东大佬为社区贡献的CAP开源项目,传送门在此:.NET Core 事件总线,分布式事务解决方案:CAP 以及 如何在你的项目中集成 CAP[手把手视频教程],之前也在工作中遇到分布式 ...

  9. asp.net core 集成JWT(一)

    [什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...

随机推荐

  1. 搭建自己的博客(九):使用shell模式批量添加博客文章并增加分页功能

    想做个博客分页功能,但是没有太多的文章.所以使用shell命令行创建多篇文章. 1.打开pycharm下的terminal终端 python manage.py shell # 打开python终端 ...

  2. git add 不能提交 vendor下面的一个文件夹

    项目要用grpc.然后composer require XXX. 把对应的包拉倒vendor目录下面.(这里先不考虑要把vendor   composer.lock提交到版本库的问题) 然后开发完成后 ...

  3. mysql中Numeric类型和int类型的区别

    首先记一下,Numeric数字数据只包含 数字.数字数据包括正数.负数.小数.分数和整数 例子如下: Numeric(6,2) Numeric(16,6) Numeric(16,0) 从左到右,第一个 ...

  4. Jira5.2.8 安装

    第一步. 安装jira 1. 运行安装包,选择自定义安装 2. 最好使用netstat -ano检查一下端口是否被占用,如果占用就选其他的靓号吧~ 3. 选择集成数据库 输入应用的名称 第二步. 破解 ...

  5. Linux中man命令的使用方法再解释

    原文链接:http://www.linuxidc.com/Linux/2017-03/142407.htm Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下 ...

  6. [RK3399] Type-C改为MicroUSB

    CPU:RK3399 系统:Android 7.1.2 为了降低成本,主板将 Type-C 改为 MicroUSB 接口,节省了 fusb302芯片 参考 Rockchip 的官方文档第4部分:Mic ...

  7. CentOS7 修改设置静态IP和DNS

    最近因为学习Puppet,用虚拟机装了个CentOS,使用的NAT的网络模式,为了防止再次启动系统的时候网络IP发生变化,因此设置静态IP和DNS. 由于CentOS是最小化安装,没有ifconfig ...

  8. 详谈mysqldump数据导出的问题

    1,使用mysqldump时报错(1064),这个是因为mysqldump版本太低与当前数据库版本不一致导致的. mysqldump: Couldn't execute 'SET OPTION SQL ...

  9. c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一、连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程

    c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: D ...

  10. python 简化数据结构的初始化一

    写在前面 在it行业混了差不多十年了,懊悔自己开始写博客的时间太晚.有那么一天就开始写了,也不知道自己会不会坚持写下去.不知不觉日子过到了今天,回头看看,也算是坚持写了.现在写博客的感觉好奇怪,一天天 ...