Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenAPI规范3-Swagger2 的美化使用

OpenAPI规范3-Swagger2 的美化使用

作者头像
软件测试君
发布于 2022-01-24 01:32:18
发布于 2022-01-24 01:32:18
6.7K00
代码可运行
举报
文章被收录于专栏:测试人生测试人生
运行总次数:0
代码可运行

背景

本人自己使用的swagger2.0,鉴于颜值和OpenAPI规范,就想体验下,后续再补充各种情况的demo

一、什么是swagger?

OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范Restful服务开发过程。目前V3.0版本的OpenAPI规范(也就是SwaggerV2.0规范)已经发布并开源在github上。即swagger2.0是基于 The Apache License, Version 2.0许可的OAS3.0实现。

二、为什么要用Swagger管理项目(Swagger特性)?

Swagger tools提供了多个模块用户构建文档,不同的模块拥有不同的作用,主模块如下:

1、设计接口

Swagger Editor:一个强大的编辑器中设计新的api或编辑现有的api,它可以直观地呈现您的狂妄定义,并提供实时的错误反馈。可以支持json和yaml(一般使用yaml)格式的数据类型。如下图:

2、构建

通过生成服务器存根和来自swagger的规范的客户端sdk,构建并启用OAS/Swagger 的可编程语言。

3、Swagger UI

Swagger需要在后台配置对于接口的相关信息并使用注解的方式将信息通过Swagger UI进行展示,自动生成了用于视觉交互的OAS规范中描述的所有文档,所以优点在于实时,减少沟通;缺点也在于使用注解的方式,过深的与代码本身交互。

三、Swagger UI2.0的实现

1、引入maven依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.4.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.4.0</version>
</dependency>
2、Swagger配置及静态配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;  
  
  
import springfox.documentation.builders.ApiInfoBuilder;  
import springfox.documentation.builders.PathSelectors;  
import springfox.documentation.builders.RequestHandlerSelectors;  
import springfox.documentation.service.ApiInfo;  
import springfox.documentation.spi.DocumentationType;  
import springfox.documentation.spring.web.plugins.Docket;  
import springfox.documentation.swagger2.annotations.EnableSwagger2;  
/* 
 * Restful API 访问路径: 
 * http://IP:port/{context-path}/swagger-ui.html 
 * eg:http://localhost:8080/vrworldapi/api/swagger-ui.html 
 */
@Component
@EnableSwagger2  
@ComponentScan(basePackages = {"gevek.vr.controller"})
@Configuration
public class RestApiConfig extends WebMvcConfigurationSupport{
  
    @Bean  
    public Docket createRestApi() {  
        return new Docket(DocumentationType.SWAGGER_2) 
          .apiInfo(apiInfo())  
          /*.groupName("用户数据模块")*/
          .genericModelSubstitutes(DeferredResult.class)
//              .genericModelSubstitutes(ResponseEntity.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("gevek.vr.controller"))
                .paths(PathSelectors.any())  
                .build();  
    }  
  
    private ApiInfo apiInfo() {  
        return new ApiInfoBuilder()  
                .title("XXXXRESTful APIs")
                .termsOfServiceUrl("http://www.lfly.com")  
                .contact("XXXX")  
                .version("1.1")
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .build();  
    }  
    
    @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
  registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
 }
} 
3、使用注解配置Controller

核心部分,需要为每一个接口配置OpenAPI规范的所有信息。常用注解如下(具体配置参数参见官网):@Api:修饰整个类,描述Controller的作用

注解名称

描述

@ApiOperation

描述一个类的一个方法,或者说一个接口

@ApiOperation:

描述一个类的一个方法,或者说一个接口

@ApiParam:

单个参数描述

@ApiModel:

用对象来接收参数

@ApiProperty:

用对象接收参数时,描述对象的一个字段

@ApiResponse:

HTTP响应其中1个描述

@ApiResponses:

HTTP响应整体描述

@ApiIgnore:

使用该注解忽略这个API

@ApiClass

@ApiError

@ApiErrors

@ApiParamImplicit

@ApiParamsImplicit

4、效果

具体每个接口参数信息如下:

四、Swagger UI的扩展

基于Swagger的注解将API个路径、描述、参数、返回值、异常状况等进行描述,swagger UI 模块仅仅是一个前端渲染框架。由于swagger默认的UI的样式虽然基于其他方式的API文件已经非常不错了,但是页面任然不是特别的美观。于是出现了swagger-ui-layerSwagger-Bootstrap-UI等框架,其本质仅仅是一个更友好和美观的前端UI界面的实现,解析的数据来源于 /v2/api-docs,而底层依然依赖于swagger的注解功能。

1、swagger-ui-layer

pom.xml中引入swaggerswagger-ui-layer和依赖,其他与使用swagger2一致,maven依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.github.caspar-chen</groupId>
    <artifactId>swagger-ui-layer</artifactId>
    <version>0.0.2</version>
</dependency>
 

需要注意的一点是 swagger api 的默认地址是/v2/api-docs 所以swagger-ui-layer也读取的是默认地址, 所以在new Docket()的时候不能指定group参数,否则 swagger api的地址会在后面加入group的参数导致swagger-ui-layer不能正确请求到数据。即使用自定义后的ui不能使用分组功能将同一类型的api进行拆分。swagger-ui-layer 的默认访问地址是 http://{port}/docs.html,而美化的界面如下:

2、Swagger-Bootstrap-UI

Swagger-Bootstrap-UIswagger-ui-layer大致相同,需要引入的依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.6</version>
</dependency>

swagger-bootstrap-ui默认访问地址是:http://{port}/doc.html

需要注意:swagger封装给出的请求地址默认是/v2/api-docs,所以swagger-bootstrap-ui调用后台也是/v2/api-docs,不能带后缀,且需返回json格式数据,框架如果是spring boot的可以不用修改,直接使用,如果是Spring MVCweb.xml中配置了DispatcherServlet,则需要追加一个url匹配规则,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<servlet>
    <servlet-name>cmsMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
 
<!--默认配置,.htm|.do|.json等等配置-->
<servlet-mapping>
    <servlet-name>cmsMvc</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<!-- 配置swagger-bootstrap-ui的url请求路径-->
<servlet-mapping>
    <servlet-name>cmsMvc</servlet-name>
    <url-pattern>/v2/api-docs</url-pattern>
</servlet-mapping>
 
效果图如下:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大模型的现在进行时:走出对话框,走向产业端
大模型热潮涌动了一年多后,越来越多人平复了激动的情绪,开始从客观的视角重新思考大模型的价值和机会。
Alter聊科技
2024/04/25
1730
大模型的现在进行时:走出对话框,走向产业端
端侧大模型浪潮奔涌而至:态势、影响与建议
10月10日,Vivo推出蓝心端侧大模型 3B,其AI能力已覆盖60多个国家和地区,服务超5亿手机用户,大模型token输出量超过3万亿;随后,字节发布首款AI智能体耳机Ola Friend,与豆包深度集成;18日,荣耀同期发布了Magic OS 9.0 ,打造AI OS,其上的YOYO智慧助手已经打通了多款APP,可以实现一句话充值、一句话点外卖等服务。中国信通院与荣耀等企业还共同发布了《终端智能化分级研究报告》,推出了行业首个终端智能化分级体系。
小腾资讯君
2024/10/31
4380
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
基于大语言模型,智能体具备自主思考、规划,调用工具并处理复杂任务的能力,且无需依赖人类明确的驱动指令。在底层技术持续突破的当下,智能体正在重塑人机交互方式。
机器之心
2025/04/18
1130
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
​大模型进化论:AI产业落地将卷向何方?
“百模大战”爆发不久,大模型价格战随之而来,成本高昂的大模型几乎进入了免费时代。大模型从庞大的实验室工具,转变为高效灵活的应用助手,以狂飙猛进的速度在众多行业落地生根。
科技云报道
2025/03/04
800
​大模型进化论:AI产业落地将卷向何方?
构建端侧生成式AI生态,联发科领先高通的一步好棋
继去年11月推出天玑9300,率先将生成式人工智能(AI)带入到智能手机端之后,芯片大厂联发科(MediaTek)为了引领移动生态抓住“生成式AI手机”市场机遇,近日召开了首届“天玑开发者大会”(MDDC 2024),并携手合作伙伴共建“生成式AI手机”标准与天玑移动AI生态,加速推动 “生成式AI手机”的普及。
芯智讯
2024/05/17
1880
构建端侧生成式AI生态,联发科领先高通的一步好棋
苹果放弃造车:AI布局已被中国手机甩开一年 | 深网
意料之外的是,花费数十亿美元、秘密开展了10年的Titan项目(造车计划)会成为苹果的“弃子”。但在电车突破寥寥、生成式AI已成为全球最重要风口的背景下,苹果放弃造车专注AI项目又在情理之中。
小腾资讯君
2024/03/13
1890
加速分化:关于大模型走势的十个判断
大模型进入加速发展的第二年,技术迭代和竞争更为激烈。令全球震撼的文生视频Sora世界模拟器、拥有更强智能的谷歌Gemini 1.5、Meta的世界模型的雏形V-JEPA同一天推出,Claude3超越了GPT4的能力。Open AI的GPT5呼之欲出,奥特曼不仅自研芯片、还投资了数家可控核聚变公司,储备未来的关键资源——算力和能源。
小腾资讯君
2024/03/15
2010
加速分化:关于大模型走势的十个判断
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
允中 发自 凹非寺 量子位 | 公众号 QbitAI ChatGPT正在加速将人工智能推入一个全新周期。 “AI的iPhone时刻”、“宛如互联网发明一样重要”……比尔·盖茨、黄仁勋等行业大佬已经用最为精简有力的语言,给这场技术风暴完成初步定义。 但具体呢?具体究竟会带来哪些机会和影响? 行业内外,迫切想要知道答案。 就在最近,一场齐聚了宋春雨、戴文渊、贾佳亚、周明、王在、唐文斌、范建平的panel上,发出了来自中国AI创新圈的声音: ChatGPT所代表的人工智能技术将重新定义生产力,超级AI算力+大模
量子位
2023/03/09
3.3K0
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
大模型这把大火,烧到了手机领域
AI大模型从年初一直火到了年尾,但似乎离普通人还有些距离。不过,现在情况似乎有了一些变化,各大手机厂商们,正在争先恐后地把大模型装进手机里,让AI变得“触手可及”。
刘旷
2023/12/15
2200
世界人工智能大会:大模型开启"工业4.0 pro"时代
2023年可以称得上是大模型发展的元年,2月份,创新型公司OpenAI连同其发布的ChatGPT一夜爆火。之后,科技公司的大模型开始陆续亮相。
华尔街科技眼
2023/07/10
2560
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
它是业界首款搭载硬件生成式AI引擎,首‍次实现端侧L‍oRA融合,让大模型技能可在本地扩展,基于个人照片生成专属表情包。
量子位
2023/11/13
1.2K0
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
把大模型装进手机,小米、OPPO、vivo 卷起来了!
随着人工智能技术迅速发展,大模型这把“火”已经烧到了越来越多的领域,手机正是其中之一。有评论甚至认为,“大模型将重新定义手机”。可以预见未来五年,AI 对手机行业的影响,完全可以比肩当年智能手机替代功能机。那么,大模型加持的智能手机会长什么样?大模型如何颠覆手机影像、交互体验?对于程序员来讲,手机操作系统和开发相关技术栈大概会是怎样?
深度学习与Python
2024/03/26
2690
把大模型装进手机,小米、OPPO、vivo 卷起来了!
新火种AI|手机大模型开卷,但划时代的改变还没到来
1月18日,随着三星新一代旗舰S24系列的正式发布,喊出“开启移动AI新时代”的口号,在新机中引入视频AI处理、AI聊天机器人、影像画面处理、通话实时翻译等多项AI功能,AI手机正式成为国内外手机厂商共同的“进化趋势”。
新火种
2024/02/13
1200
新火种AI|手机大模型开卷,但划时代的改变还没到来
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
2023 年,大模型与生成式 AI 的崛起无疑成为了技术领域的焦点。在这一年里,大模型和生成式 AI 的讨论持续“破圈”,各类商用大模型和开源大模型的发布和更新将技术创新推向了新的高峰,相关产品不断发布。
深度学习与Python
2024/02/17
2040
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
洞见2025年科技潮流,技术大融合开启“智算时代”
随着2024年逐渐接近尾声,人们不禁开始展望即将到来的2025年。这一年,被众多科技界人士视为开启新纪元的关键节点。站在新的起点上,我们将亲眼目睹未来科技如何改变我们的世界。从人工智能到量子计算,从基因编辑到太空探索,每一项前沿技术都预示着一场深刻的变革。
科技云报道
2025/03/04
1000
洞见2025年科技潮流,技术大融合开启“智算时代”
发布「从容大模型」,云从扬起「数实融合」的帆
5月18日,作为国内人工智能企业第一梯队的云从科技,也发布了自身的行业大模型“从容大模型”。
AI掘金志
2023/08/26
3180
发布「从容大模型」,云从扬起「数实融合」的帆
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
在上个月的 WMC2024 上,德国电信联合高通、Brain.ai 推出了一款突破性创新的概念 AI 手机 T phone。与传统智能手机不同,这款手机主打一个“无 App”,它清除了屏幕上的密密麻麻的 App 图标,只留有一个按钮用来激活手机里的 AI 助手,让用户通过类似 ChatGPT 的操作界面来交互。
深度学习与Python
2024/03/26
1100
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
10年市场规模1.3万亿美元,「模力时代」已来
比如,OpenAI最新AI绘画模型DALL· E 3刚一登场,就跟ChatGPT强强联合,成为ChatGPT Plus里最令人期待的新生产力工具。
量子位
2023/10/25
1630
10年市场规模1.3万亿美元,「模力时代」已来
腾讯发布大模型时代的AI十大趋势:走进“机器外脑”时代
人工智能迅速发展,大模型技术成为赋能各行各业的关键。从算力底座、智力增强到人机协作,大模型正在重塑人类社会,成为可依赖的"外脑"。
小腾资讯君
2024/07/09
7410
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
近日,高通技术公司正式发布白皮书《混合 AI 是 AI 的未来》。高通在白皮书中提到,随着生成式 AI 正以前所未有的速度发展以及计算需求的日益增长,AI 处理必须分布在云端和终端进行,才能实现 AI 的规模化扩展并发挥其最大潜能——正如传统计算从大型主机和瘦客户端演变为当前云端和边缘终端相结合的模式。与仅在云端进行处理不同,混合 AI 架构在云端和边缘终端之间分配并协调 AI 工作负载。 云端和边缘终端如智能手机、 汽车、个人电脑和物联网终端协同工作,能够实现更强大、更高效且高度优化的 AI。
深度学习与Python
2023/08/09
4640
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
推荐阅读
大模型的现在进行时:走出对话框,走向产业端
1730
端侧大模型浪潮奔涌而至:态势、影响与建议
4380
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
1130
​大模型进化论:AI产业落地将卷向何方?
800
构建端侧生成式AI生态,联发科领先高通的一步好棋
1880
苹果放弃造车:AI布局已被中国手机甩开一年 | 深网
1890
加速分化:关于大模型走势的十个判断
2010
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
3.3K0
大模型这把大火,烧到了手机领域
2200
世界人工智能大会:大模型开启"工业4.0 pro"时代
2560
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
1.2K0
把大模型装进手机,小米、OPPO、vivo 卷起来了!
2690
新火种AI|手机大模型开卷,但划时代的改变还没到来
1200
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
2040
洞见2025年科技潮流,技术大融合开启“智算时代”
1000
发布「从容大模型」,云从扬起「数实融合」的帆
3180
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
1100
10年市场规模1.3万亿美元,「模力时代」已来
1630
腾讯发布大模型时代的AI十大趋势:走进“机器外脑”时代
7410
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
4640
相关推荐
大模型的现在进行时:走出对话框,走向产业端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验