0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何搭建 Swagger API文档平台

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 15:37 次阅读

相信大家平时开发的过程中,都会使用到 API文档工具吧?大家都在使用什么呀?Java docsI/O Docs, apiary.io, Docco, Dexy, Doxygen, TurnAPISwagger。今天我就来教大家如何使用 Swagger 搭建 API 文档,并且配置权限使用。毕竟开发文档还是内容使用的为好,万一上线到生产环境,没有关swagger 又没有设置权限,那可不GG啦。

好,我们这就上手搞起来。

我们将使用 SpringfoxSwagger 2 规范的实现,并通过 JWT 的方式来设置权限。

配置SwaggerUI

第一步:向Spring Boot项目添加Maven依赖项

打开 pom.xml 文件,添加 springfox-boot-startermaven 依赖中。

< dependency >
    < groupId >io.springfox< /groupId >
    < artifactId >springfox-boot-starter< /artifactId >
    < version >3.0.0< /version >
< /dependency >

添加 springfox-boot-starter 依赖后,spring boot 能启动配置功能,配置好 swagger,所以我们不需要手动添加注解来启用 Swagger

我们启动一下项目访问 Swagger 文档的 JSON API , 来看看 Springfox 是否正常运行。我们可以在浏览器中输入以下URL:

http://localhost:8080/v3/api-docs

图片

能够看到以上的类似结果,说明我们第一步已经成功了。

第二步:将 Swagger 2 集成到 Spring Boot 项目中去

我们创建一个 SwaggerConfig 类,并用 @Configuration 注解来注释。Swagger 的配置主要围绕着 Docket 对象来完成。我们可以在 SwaggerConfig 类中添加以下代码。

@Configuration
public class SwaggerConfiguration {
    private ApiInfo apiInfo() {
        return new ApiInfo("Blog REST APIs",
                "REST APIs for Blog Application",
                "1.0",
                "Terms of service",
                new Contact("xxx", "xxx", "xxx"),
                "License of API",
                "API license URL",
                Collections.emptyList());
    }
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

在构造 Docket 对象之后,它的 select() 方法返回了 ApiSelectorBuilder 的一个实例,它提供了一种控制 Swagger 所暴露的端点的方法。

我们可以通过使用 RequestHandlerSelectorsPathSelectors 配置选择 RequestHandlers 的路径。如果两者两者使用 any() , 那就说明配置所有的 API 都能在 Swagger 上显示了。

第三步:访问 Swagger UI

Swagger UI 是一个内置的解决方案,使用户与 Swagger 生成的API文档的交互变得更加容易。我们在浏览器中输入下面URL即可查看:

http://localhost:8080/swagger-ui/

图片

结果应该是这样的。

好,到这里 Swagger 的使用配置就算结束了。那接下来我们来看看怎么用JWT增加权限配置呢?

配置 JWT

JWT 是什么?相信大家都一定听过吧,它就是 JSON Web Token 的缩写。话不多说,直接上手代码配置起来。在 SwaggerConfig 里面新增代码。

我们先来配置 ApiKey 作为 JWT认证 header 信息

public static final String AUTHORIZATION_HEADER = "Authorization";
    private ApiKey apiKey(){
        return new ApiKey("JWT", AUTHORIZATION_HEADER, "header");
    }

下一步,我们配置 JWTSecurityContext , 对 SecurityContext 配置全局的 AuthorizationScope :

private SecurityContext securityContext(){
        return SecurityContext.builder().securityReferences(defaultAuth()).build();
    }
    private List< SecurityReference > defaultAuth(){
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("JWT", authorizationScopes));
    }

然后我们配置 Docket 对象,对 Docket 对象设置 SecurityContextSecuritySchemes

@Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()))
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

到这里,JWT 就配置完成了,感觉是不是挺简单的?好,我们再来运行一下,看看效果

图片

我们点击右上角的 Authorize 按钮,弹出一个输入 apiKey 的弹出层。

图片

输入 api key 之后,点击 Authorize 认证通过,我们就又能调用 API 接口调试了。

用注解定制 Swagger API 文档

为了能够定制 Swagger 文档,swagger-core 提供了一套注解来声明和操作输出。

Swagger-core 注解:

NameDescription
@Api标记为 Swagger 资源
@ApiModel标记为 Swagger 模型
@ApiModelProperty模型字段的属性说明
@ApiOperationhttp接口的说明
@ApiParamhttp 接口参数说明

更多详细的说明可以参考 GitHub 上的解释:https://github.com/swagger-api/swagger-core/wiki/annotations

现在我们就举个例子来解释怎么使用这些个注解, 首先来看 @Api@ApiOperation 怎么使用:

@Api(value = "CRUD Rest APIs for Post resources")
@RestController
@RequestMapping()
public class PostController {
    @ApiOperation(value = "Get All Posts REST API")
    @GetMapping("/api/v1/posts")
    public PostResponse getAllPosts(
            @RequestParam(value = "pageNo", defaultValue = "0", required = false) int pageNo,
            @RequestParam(value = "pageSize", defaultValue = "100", required = false) int pageSize
    ){
        ...
    }
 
}

再来看看 @ApiModel@ApiModelProperty 怎么使用:

@ApiModel(description = "Post model information")
@Data
public class PostDto {
    @ApiModelProperty(value = "Blog post id")
    private long id;
}

是不是感觉 so easy?

总结

通过这篇文章我们学习了如何通过 Springfox 来搭建 Swagger API 文档平台,然后也学会了如何设置 JWT 的方式做认证,保证 API 不会被别人能够恶意使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1383

    浏览量

    60992
  • 浏览器
    +关注

    关注

    1

    文章

    974

    浏览量

    34420
  • URL
    URL
    +关注

    关注

    0

    文章

    134

    浏览量

    14830
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66775
收藏 人收藏

    评论

    相关推荐

    swagger和smart-doc的区别

    首先,Swagger 这个工具能够自动生成 API 接口文档,在线调试,节省了很多书写文档的时间,非常强大。 但是,想要文档生成的合格,还是
    的头像 发表于 09-30 10:01 296次阅读
    <b class='flag-5'>swagger</b>和smart-doc的区别

    关于IAR搭建开发平台

    请教大神:小弟刚入行STM32,想问如何用IAR搭建STM32的开发平台,网上找了些文档看,还是不太清楚,望大神不吝赐教
    发表于 07-03 09:04

    紫外刻写光纤光栅平台搭建提供

    紫外刻写光纤光栅平台搭建提供从平台设计、核心光路系统设计,平台搭建、模块调谐到用户培训完整的刻写平台
    发表于 12-29 20:39

    DM8127 link api 说明文档

    1. 请问哪里有 DM8127 link  api的说明文档。 详细描述M3 VPSS VIDEO  DSP A8上面的link的文档。 有些缩写,都不明白是什么?比如,GRPX link a
    发表于 06-21 06:02

    Tasking平台搭建流程

    在QQ群里看到有人问Tasking平台搭建的问题,正好以前做过的这类文档,发上来共享一下,希望能有点帮助Tasking-平台搭建.pdf (
    发表于 12-14 10:39

    在哪里查看HarmonyOS的API文档

    如何查看HarmonyOS的API文档
    发表于 04-02 15:13

    缺少VGlite字体渲染api文档,求分享

    我试图使用 vglite api 在 MIMXRT1166/1176 上使用 verisilicon gpu 渲染图形,并且特别缺乏关于此的文档。 我能够很好地初始化 GPU 并渲染矢量和光栅对象
    发表于 04-24 06:42

    如何搭建API程序_框架api接口规范

    基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。搭建
    发表于 01-04 17:48 1.2w次阅读
    如何<b class='flag-5'>搭建</b><b class='flag-5'>API</b>程序_框架<b class='flag-5'>api</b>接口规范

    虚拟机与Linux系统安装以及云计算平台搭建及安装

    文档内容介绍了基于虚拟机与Linux系统安装以及云计算平台搭建及安装,供参考
    发表于 04-17 15:50 23次下载

    如何通过ApiFox来构建API场景测试

    在开发前后台分离项目并且通过不同团队来实现的时候,如何将后台设计的 API 准确的传达到前台,是一个非常重要的工作。为了简化这个过程,开源社区做了很多努力,比如 protobuf技术,swagger
    的头像 发表于 09-01 10:48 1335次阅读

    深度“盘”一下Eolink这款免费API协作平台

    使用 Flasgger 得到一个 Swagger UI 具体步骤,不做重点描述,咱们的目标是打通 Swagger 和 Eolink,让 API 研发资产可以盘活,Swagger 简易部
    的头像 发表于 12-15 14:59 745次阅读

    API+DevOps:华为云API Arts一体化平台,端到端呵护您的API

    华为云API Arts是API全生命周期一体化协作平台,支持开发者一站式高效实现API设计、API开发、
    的头像 发表于 03-01 15:45 537次阅读
    <b class='flag-5'>API</b>+DevOps:华为云<b class='flag-5'>API</b> Arts一体化<b class='flag-5'>平台</b>,端到端呵护您的<b class='flag-5'>API</b>

    ChatGPT API文档

    来补充下这个API文档,帮助理解。感觉prompt(提示)、Embeddings(嵌入)、Fine-tunes(微调)有 点牛逼。
    发表于 06-06 17:38 0次下载

    swagger和smart-doc的区别

    首先,Swagger 这个工具能够自动生成 API 接口文档,在线调试,节省了很多书写文档的时间,非常强大。 但是,想要文档生成的合格,还是
    的头像 发表于 09-30 16:08 478次阅读
    <b class='flag-5'>swagger</b>和smart-doc的区别

    红绿灯倒计时API开发文档

    百度红绿灯倒计时API开发文档
    发表于 06-30 11:53 3次下载