Oh my God, Swagger API文档竟然可以这样写?

最好的总会在不经意间出现。

作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率。

为避免联调时来回撕逼,今天我们聊一聊正确编写Swaager API文档的姿势。

基础Swagger用法

ConfigureServices配置Swagger文档,在Configure启用中间件

 // Install-Package Swashbuckle.AspNetCore 略 services.AddSwaggerGen(options =>{options.SwaggerDoc("v1", new OpenApiInfo { Title = "EAP API", Version = "v1" });});     
---app.UseSwagger();
app.UseSwaggerUI(options =>
{options.SwaggerEndpoint("/swagger/v1/swagger.json", "EAP API");
});

应用会在/Swagger页面加载最基础的API文档。

以一个最简单的Post请求为例,细数这最基础Swagger文档的弊病

[HttpPost]
public async Task<bool> AddHotmapAsync([FromBody] CreateHotmapInput createHotmapInput)
{var model = ObjectMapper.Map<CreateHotmapInput, Hotmap>(createHotmapInput);model.ProfileId = CurrentUser.TenantId;return await _hotmaps.InsertAsync(model)!= null;
}

产生如图示SwaggerUI:

  1. Post请求的Payload字段过于复杂,竟不给前端传值example?

  2. 没有约定请求的媒体类型,前端会不会给你另外一个surprise?

  3. API 文档没有指示响应的媒体类型,前端以哪种姿势接收?

  4. API文档没有指示响应的预期输出内容、状态码,前端会不会抓狂?

下文就来根治这些顽疾, 书写一个自述性、优雅的API文档。

Swagger最佳实践

三下五除二,给出示例:

/// <summary>
/// 添加热力图
/// </summary>
/// <remarks>
/// Sample request:
/// ```
///  POST /hotmap
///  {
///      "displayName": "演示名称1",
///      "matchRule": 0,
///      "matchCondition": "https://www.cnblogs.com/JulianHuang/",
///      "targetUrl": "https://www.cnblogs.com/JulianHuang/",
///      "versions": [
///      {
///         "versionName": "ver2020",
///         "startDate": "2020-12-13T10:03:09",
///         "endDate": "2020-12-13T10:03:09",
///          "offlinePageUrl": "3fa85f64-5717-4562-b3fc-2c963f66afa6",  //  没有绑定图片和离线网页的对应属性传 null
///          "pictureUrl": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
///          "createDate": "2020-12-13T10:03:09"
///      }
///    ]
///  }
///```
/// </remarks>
/// <param name="createHotmapInput"></param>
/// <returns></returns>
[Consumes("application/json")]
[Produces("text/plan")]
[ProducesResponseType(typeof(Boolean), 200)]
[HttpPost]
public async Task<bool> AddHotmapAsync([FromBody] CreateHotmapInput createHotmapInput)
{var model = ObjectMapper.Map<CreateHotmapInput, Hotmap>(createHotmapInput);model.ProfileId = CurrentUser.TenantId;return await _hotmaps.InsertAsync(model)!=null;
}
  1. 通过给API添加XML注释:remarks

注意如果注释内容包含代码,可以使用Markdown的代码语法```,在注释里面优雅显示代码。

  1. 通过Consumes,Produces特性指示action接收和返回的数据类型,也就是媒体类型。

Consumes、Produces是指示请求/响应支持的content-type的过滤器,位于Microsoft.AspNetCore.Mvc命名空间下。

  1. 通过ProducesResponseType特性指示API响应的预期内容、状态码

API文档显示如下:

这样的Swagger文档才正确表达了后端程序员的内心输出。


在Swagger文档上显示注释

  1. 生成XML文档文件

    在项目上[右键]-[属性]-[生成标签页]-[勾选XML文档文件];

    或者直接在项目csproj文件--[PropertyGroup]添加

    <GenerateDocumentationFile>true</GenerateDocumentationFile>

  2. AddSwaggerGen方法添加下行,启用注释文件

// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{this.GetType().Assembly.GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
opt.IncludeXmlComments(xmlPath);

这里啰嗦一下,如果是Abp Vnext解决方案(API是定义在HttpApi项目/Application项目),若我们要为Abp Vnext解决方案加载带xml注释的Swagger Json,需要更改xmlFile为特定HttpApi.xml或applicaiton.xml。

以上就是小码甲总结的书写Swagger文档的优雅姿势: 

  • 编写API 传值example

  • 约束请求/响应 支持的媒体类型

  • 指示API的预期输出内容、预期状态码

内容自述,格式工整,前端同事再也不会追着你撕逼了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之格式变化——reshape(-1,1)

格式变化——reshape函数 知识基础代码知识基础 reshape(行数,列数)常用来更改数据的行列数目 一般可用于numpy的array和ndarray, pandas的dataframe和series(series需要先用series.values把对象转化成ndarray结构) 那么问题来了reshape(-1,1)是什么意思呢?难道有-1行? 这…

vue 前端设置允许跨域_web 前端的一些小问题

关于vue使用axios post发送json数据跨域请求403的解决方法&#xff1a;1. 问题vue开发的时候&#xff0c;使用axios跨域发送请求&#xff0c;同时post发送的数据格式是json格式&#xff0c;发送出去的时候发现控制台报错403&#xff0c;返回的信息提示是跨域的问题&#xff0c;…

如何在 Windows 10 上安装 WSL 2

翻译自 Joey Sneddon 2020年10月30日的文章《How to Install WSL 2 on Windows 10》 [1]如果您想在最新的 Windows 版本中尝试经过改进的 Windows 子系统 Linux 2 (即 WSL 2) [2]&#xff0c;要怎么做呢&#xff1f;我们在本文中介绍了安装它所需要做的所有事情。WSL 2 是微软早…

机器学习之超参数调优——超参数调优的方法

超参数调优的方法概述网格搜索随机搜索贝叶斯优化算法概述 对于很多算法工程师来说&#xff0c; 超参数调优是件非常头疼的事。除了根据经验设定所谓的“合 理值”之外&#xff0c; 一般很难找到合理的方法去寻找超参数的最优取值。 而与此同时&#xff0c;超参数对于模型效果…

lnmp无法远程连接mysql_MySQL(一):设置root 可以远程连接MySQL

在mysql在远程主机或虚拟机上时&#xff0c;远程连接mysql数据库一般都使用GUI工具&#xff0c;比如Mac下的Sequel Pro&#xff1b;win和linux下的Sqlyog&#xff1b; 还有大名鼎鼎的Navicat。有人也许会说命令行多好&#xff0c;对着黑黑的屏幕噼里啪啦的一顿敲&#xff0c;屏…

机器学习之模型——保存与加载

机器学习之模型——保存与加载 知识点fit()transform()fit_transform()目的API流程获取数据划分数据集标准化预估器保存模型加载模型得出模型模型评估整体代码知识点 fit() Method calculates the parameters μ and σ and saves them as internal objects. 解释:简单来说,…

GraphQL:打造自己的Directive库

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容易地随着时间推移而演进&#xff0c…

云付认证已通过可以支付吗_海科融通丨刷新支付日常问题【附交易操作步奏】...

01常见问题汇总QPIN秘钥检验出错A&#xff1a;认证时不要频繁点击&#xff0c;点完后等一等系统反应&#xff0c;可联系客服处理。Q报错99&#xff0c;该小商户已入网A&#xff1a;提供商户编号给服务经理处理。Q终端屏幕无法签字A&#xff1a;待机界面&#xff0c;输入#0#&…

机器学习案例——生态系统蒸散速率预测

生态系统蒸散速率预测 问题背景概述数据集、代码、报告下载实验步骤分析一、数据预处理1、 对生态观测数据表和植被数据表进行数据预处理2、将不同站点的多个表进行纵向合并3、进行质量控制及去除异常值二、筛选特征1、画相关性热力图(使用热力图进行相关性分析)2、进行特征选择…

邀请函|WorkShop报名通道开启,来就送礼!

作为互联网行业的年度盛会今年除延续以往的开幕与论坛技术分享外还增设了Work Shop 体验课程&#xff01;参加此次工作坊不仅能近距离和大佬进行互动体验项目开发的快感还能领取大会纪念卫衣、书籍等惊喜好礼是不是很期待&#xff1f;&#xff08;数量有限先到场先得&#xff0…

对象数组参数_【JavaScript 教程】标准库—Array 对象

作者 | 阮一峰1、构造函数Array是 JavaScript 的原生对象&#xff0c;同时也是一个构造函数&#xff0c;可以用它生成新的数组。var arr new Array(2);arr.length // 2arr // [ empty x 2 ]上面代码中&#xff0c;Array构造函数的参数2&#xff0c;表示生成一个两个成员的数组…

机器学习之无监督学习——聚类

机器学习之无监督学习——聚类无监督学习一、基于划分的聚类方法1、基于划分的方法 简介A、概念B、分组C、分组与样本 对应关系D、硬聚类 与 软聚类二、基于层次的聚类方法1、基于层次的聚类方法 概念 :2、基于层次的聚类方法 :A、聚合层次聚类 ( 叶子节点到根节点 )聚合层次聚…

2020 . NET大会日程公布!行程亮点全曝光

|倒计时5天文末有福利答应我看到最后|2020年12月19日由.NET众多社区联合组织主办的2020年中国.NET开发者大会将于苏州盛大开幕时间&#xff1a;2020/12/19-12/20主题&#xff1a;开源、共享、创新地点&#xff1a;苏州人工智能产业园▽本次大会以“开源、共享、创新”为主题&am…

橡皮擦_日本推出改邪归正橡皮擦,看得我头顶一凉

▲▲▲点击查看▲▲▲日本&#xff0c;可以说是文具控的天堂。各种不按套路出牌&#xff0c;又十分合理有趣的文具&#xff0c;真是太多太多。就比如这块「改邪归正橡皮擦」&#xff1a;这么看&#xff0c;你可能看不出到底怎么个改邪归正法&#xff0c;但其实它的创作灵感来自…

机器学习之琐碎知识(代码运行问题)

机器学习之琐碎知识1、python代码中忽略警告2、python在画图时显示中文1、python代码中忽略警告 解决方案&#xff1a; import warnings warnings.filterwarnings("ignore")2、python在画图时显示中文 解决方案&#xff1a; # 支持中文 plt.rcParams[font.sans-s…

三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程

三菱PLC在80年代进入中国市场&#xff0c;已有30多年历史。由于三菱PLC编程易学&#xff0c;功能强大&#xff0c;深受中国用户喜爱。随着时间推移&#xff0c;市场上已经淘汰掉二代产品&#xff0c;关系图如下&#xff1a;说明90年代老型号2000年代老型号低端小型机FX0SFX1S中…

在 ASP.NET Core 中使用多种方式给 Action 传参

ASP.NET Core 是一个跨平台&#xff0c;开源的&#xff0c;轻量级&#xff0c;高性能 并且 高度模块化的web框架。在 ASP.NET Core MVC 中有很多种方式可以给 Action 方法传递参数&#xff0c;比如说&#xff1a;url方式&#xff0c;querystring方式&#xff0c;request header…

机器学习之tensorflow出现的一些问题

机器学习之tensorflow出现的一些问题 1、查看tensorflow版本2、Jupyter Notebook 工作环境配置3、anaconda查看已有环境4、anaconda进入已有的虚拟环境5、查看该环境下的TensorFlow的版本6、查看查看anaconda虚拟环境中的python 版本1、查看tensorflow版本 import tensorflow …

gitlab创建分支上传文件_Gitlab管理和使用基本教程

一、注册并设置Gitlab个人信息(一)注册Gitlab登录Gitlab站点&#xff0c;注册账户&#xff0c;设置基本个人信息。按提示操作即可。(二)配置ssh连接信息1.创建SSH密钥通过下面的命令生成密钥&#xff0c;请将命令中的YOUR_EMAILYOUREMAIL.COM替换为你注册Gitlab时用的Email地址…

WinUI 3 Preview 3 发布了,再一次试试它的性能

1. WinUI 3在微软 Build 2020 开发者大会上&#xff0c;WinUI 团队宣布可公开预览的 WinUI 3 Preview 1&#xff0c;它让开发人员可以在 Win32 中使用 WinUI。最终 XAML 的新功能不再和 Windows SDK 绑定&#xff0c;所有新的 XAML 功能都将作为 WinUI 的一部分发布。作为 OS 的…