Swagger

第一节 Swagger 简介

1. 企业开发所面临的问题

在前后端分离开发的情况下,前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致。后端开发人员觉得编写接口文档太过于消耗精力,而且更新也不及时,以至于前后端开发人员经常出现争吵的情况,为了解决这个问题,Swagger应运而生。

2. Swagger 简介

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。

3. Swagger 的优势

  • 支持 API 自动生成同步的在线文档

    使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

  • 提供 Web 页面在线测试 API

    光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

4. Swagger 依赖

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>io.springfox<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>springfox-swagger2<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.7.0<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#aa5500"><!--swagger-ui的jar包(里面包含了swagger的界面静态文件) --></span>
<span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>io.springfox<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>springfox-swagger-ui<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.7.0<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>com.fasterxml.jackson.core<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>jackson-databind<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.12.5<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span></span></span>

第二节 Swagger 注解

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Api</span> <span style="color:#aa5500">//修饰整个类,描述Controller的作用  </span>
​
<span style="color:#555555">@ApiOperation</span> <span style="color:#aa5500">//描述一个类中的一个方法</span>
​
<span style="color:#555555">@ApiParam</span> <span style="color:#aa5500">//单个参数的描述信息  </span>
​
<span style="color:#555555">@ApiModel</span> <span style="color:#aa5500">//用对象来接收参数  </span>
​
<span style="color:#555555">@ApiModelProperty</span> <span style="color:#aa5500">//用对象接收参数时,描述对象的一个字段  </span>
​
<span style="color:#555555">@ApiResponse</span> <span style="color:#aa5500">//HTTP响应其中1个描述  </span>
​
<span style="color:#555555">@ApiResponses</span> <span style="color:#aa5500">//HTTP响应整体描述  </span>
​
<span style="color:#555555">@ApiIgnore</span> <span style="color:#aa5500">//使用该注解忽略这个API  </span>
​
<span style="color:#555555">@ApiError</span> <span style="color:#aa5500">//发生错误返回的信息  </span>
​
<span style="color:#555555">@ApiImplicitParam</span> <span style="color:#aa5500">//一个请求参数  </span>
​
<span style="color:#555555">@ApiImplicitParams</span> <span style="color:#aa5500">//多个请求参数的描述信息</span></span></span>

示例

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Api</span>(<span style="color:#000000">tags</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"CommunityPersonController"</span>, <span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"用户管理"</span>, <span style="color:#000000">description</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"用户管理API"</span>)
<span style="color:#555555">@RestController</span>
<span style="color:#555555">@RequestMapping</span>(<span style="color:#aa1111">"/communityPerson"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">CommunityPersonController</span> {
​
    <span style="color:#555555">@Autowired</span>
    <span style="color:#770088">private</span> <span style="color:#000000">CommunityPersonService</span> <span style="color:#000000">personService</span>;
​
    <span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询小区信息"</span>)
    <span style="color:#555555">@ApiImplicitParams</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> {
            <span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"query"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPersonCondition</span>.<span style="color:#770088">class</span>)
    })
    <span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
    <span style="color:#555555">@GetMapping</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#000000">PageInfo</span><span style="color:#981a1a"><</span><span style="color:#000000">CommunityPerson</span><span style="color:#981a1a">>></span> <span style="color:#000000">searchCommunityPersons</span>(<span style="color:#555555">@ModelAttribute</span> <span style="color:#000000">CommunityPersonCondition</span> <span style="color:#000000">personCondition</span>){
        <span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">searchCommunityPersons</span>(<span style="color:#000000">personCondition</span>));
    }
​
    <span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询户主选项"</span>)
    <span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"header"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#008855">String</span>.<span style="color:#770088">class</span>, <span style="color:#000000">defaultValue</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"幸福"</span>, <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"content"</span>)
    <span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
    <span style="color:#555555">@GetMapping</span>(<span style="color:#aa1111">"/item"</span>)
    <span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#000000">CommunityPerson</span><span style="color:#981a1a">>></span> <span style="color:#000000">getCommunityPersons</span>(<span style="color:#555555">@RequestParam</span>(<span style="color:#aa1111">"content"</span>) <span style="color:#008855">String</span> <span style="color:#000000">content</span>){
        <span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">getCommunityPersons</span>(<span style="color:#000000">content</span>));
    }
​
​
    <span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询小区户主选项"</span>)
    <span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"path"</span>, <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>, <span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>,<span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#008855">String</span>.<span style="color:#770088">class</span>, <span style="color:#000000">defaultValue</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"1"</span>)
    <span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
    <span style="color:#555555">@DeleteMapping</span>(<span style="color:#aa1111">"/{id}"</span>)
    <span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">deleteCommunityPerson</span>(<span style="color:#555555">@PathVariable</span>(<span style="color:#aa1111">"id"</span>)<span style="color:#008855">String</span> <span style="color:#000000">id</span>){
        <span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">deleteCommunityPersonById</span>(<span style="color:#000000">id</span>));
    }
​
    <span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"添加小区成员信息"</span>)
    <span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"body"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPerson</span>.<span style="color:#770088">class</span>)
    <span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
    <span style="color:#555555">@PostMapping</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">addCommunityPerson</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">CommunityPerson</span> <span style="color:#000000">person</span>){
        <span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">addCommunityPerson</span>(<span style="color:#000000">person</span>));
    }
​
    <span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"修改小区成员信息"</span>)
    <span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"body"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPerson</span>.<span style="color:#770088">class</span>)
    <span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
    <span style="color:#555555">@PutMapping</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">updateCommunityPerson</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">CommunityPerson</span> <span style="color:#000000">person</span>){
        <span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">updateCommunityPerson</span>(<span style="color:#000000">person</span>));
    }
}</span></span>

第三节 Swagger 配置

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@EnableSwagger2</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">SwaggerConfig</span> {
    <span style="color:#555555">@Bean</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Docket</span> <span style="color:#000000">api</span>() {
        <span style="color:#aa5500">//Docket类就是Swagger提供的一个与Spring MVC集成的配置类</span>
        <span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">Docket</span>(<span style="color:#000000">DocumentationType</span>.<span style="color:#000000">SWAGGER_2</span>) <span style="color:#aa5500">//文档类型设置为SWAGGER2</span>
                .<span style="color:#000000">select</span>() <span style="color:#aa5500">//选择当前文档类型进行构建</span>
                .<span style="color:#000000">apis</span>(<span style="color:#000000">RequestHandlerSelectors</span>.<span style="color:#000000">basePackage</span>(<span style="color:#aa1111">"com.qf.ssm.controller"</span>)) <span style="color:#aa5500">//请求控制器包</span>
                .<span style="color:#000000">paths</span>(<span style="color:#000000">PathSelectors</span>.<span style="color:#000000">any</span>())<span style="color:#aa5500">//为任意请求构建API文档</span>
                .<span style="color:#000000">build</span>() <span style="color:#aa5500">//构建API</span>
                .<span style="color:#000000">apiInfo</span>(<span style="color:#000000">apiInfo</span>()); <span style="color:#aa5500">//设置AIP文档的信息</span>
    }
​
    <span style="color:#770088">private</span> <span style="color:#000000">ApiInfo</span> <span style="color:#000000">apiInfo</span>() {
        <span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">ApiInfoBuilder</span>()
                .<span style="color:#000000">title</span>(<span style="color:#aa1111">"物业管理项目接口文档"</span>)
                .<span style="color:#000000">description</span>(<span style="color:#aa1111">"物业管理项目接口测试"</span>)
                .<span style="color:#000000">version</span>(<span style="color:#aa1111">"1.0.0"</span>)
                .<span style="color:#000000">termsOfServiceUrl</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//服务条款地址</span>
                .<span style="color:#000000">license</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//许可证</span>
                .<span style="color:#000000">licenseUrl</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//许可证URL</span>
                .<span style="color:#000000">build</span>();
    }
}</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.qf.ssm.config.SwaggerConfig"</span> <span style="color:#117700">/></span>
<span style="color:#aa5500"><!--静态资源放行--></span>
<span style="color:#117700"><</span><span style="color:#117700">mvc:resources</span> <span style="color:#0000cc">location</span>=<span style="color:#aa1111">"classpath:/META-INF/resources/"</span> <span style="color:#0000cc">mapping</span>=<span style="color:#aa1111">"swagger-ui.html"</span><span style="color:#117700">/></span>
<span style="color:#aa5500"><!--静态资源放行--></span>
<span style="color:#117700"><</span><span style="color:#117700">mvc:resources</span> <span style="color:#0000cc">location</span>=<span style="color:#aa1111">"classpath:/META-INF/resources/webjars/"</span> <span style="color:#0000cc">mapping</span>=<span style="color:#aa1111">"/webjars/**"</span><span style="color:#117700">/></span></span></span>

启动服务器,然后输入输入网址访问: http://localhost:10240/swagger-ui.html

<think>好的,我现在需要处理用户关于Swagger API文档工具的使用指南的请求。首先,用户明确提到想了解Swagger或查找相关技术资料,特别是使用指南。根据用户提供的系统级指令,我需要确保回答结构清晰,使用中文,正确应用LaTeX格式,并生成相关问题。同时,用户的历史引用中有两篇关于Swagger的文章,我需要参考这些内容,但也要注意用户指出这些引用并非真实需求,可能需要更多依赖之前的互动,不过当前对话中用户只提到了这两篇,所以得合理利用。 首先,我应该先确定用户的需求层次。他们可能希望了解Swagger的基本概念、如何安装配置、如何编写API文档以及相关工具的使用,比如生成离线文档。根据引用[1],Swagger用于创建和管理RESTful API文档,提供交互式测试界面。引用[2]提到一个离线工具,可以转换在线文档为HTML或Markdown。因此,在回答中需要涵盖基础使用步骤,并可能提到离线工具作为扩展内容。 接下来,我需要按照用户的要求分步骤说明,结构清晰。可能需要分为以下几个部分:1. Swagger简介;2. 安装与配置;3. 编写API文档;4. 生成离线文档。每个部分需要简明扼要,同时嵌入引用标记。例如,在介绍Swagger时引用[^1],在离线工具部分引用[^2]。 另外,需要注意LaTeX格式的应用。比如,变量或技术术语如YAML文件是否需要使用行内数学表达式?可能不需要,但如果有示例代码中的路径或文件名,可能需要用代码块而非LaTeX。用户要求行内数学表达式用$...$,但技术文档中的代码部分应使用代码块,如示例中的Python代码。因此,在回答中,我会正确使用代码块和LaTeX,比如在提到数学公式时使用,但可能在这个主题下数学公式较少,更多是代码示例。 生成相关问题部分,需要考虑用户可能进一步询问的内容,比如Swagger UI的定制、安全配置、与其他工具的对比、离线文档工具的具体使用步骤等。需要确保问题覆盖用户可能感兴趣的扩展话题。 最后,检查是否符合所有系统指令:中文回答、正确格式、引用标识自然、相关问题生成。需要确保没有使用Markdown格式,除了代码块,但用户示例中的代码块使用了```python,所以可能允许。同时,回答中的引用标识应放在相关段落末尾,如[^1]和[^2]。</think>### Swagger API 文档工具使用指南 #### 1. Swagger 简介 Swagger(现称为 OpenAPI 规范)是一套用于设计、构建和记录 RESTful API 的开源工具集。它通过标准化的 YAML/JSON 格式描述 API 结构,并提供交互式界面$^{[^1]}$。核心功能包括: - **API 设计**:使用 `swagger.yaml` 或 `swagger.json` 定义接口 - **文档生成**:自动生成可读性强的 HTML 页面 - **接口测试**:直接在浏览器中模拟 API 调用 #### 2. 安装与配置 以 Node.js 环境为例: ```bash # 安装 Swagger 命令行工具 npm install -g swagger # 初始化项目 swagger project create my-api ``` 配置文件 `config/default.yaml` 中可设置服务器端口、数据库连接等参数$^{[^1]}$。 #### 3. 编写 API 文档 创建 `api/swagger/swagger.yaml` 文件: ```yaml swagger: "2.0" info: title: 用户管理系统 version: 1.0.0 paths: /users: get: summary: 获取用户列表 responses: 200: description: 成功返回用户列表 ``` #### 4. 生成离线文档 使用 SwaggerOfflineDoc 工具转换在线文档为离线格式$^{[^2]}$: ```bash # 下载工具 git clone https://github.com/example/SwaggerOfflineDoc # 生成 HTML 文档 python convert.py --input http://api.example.com/swagger.json --format html ``` #### 5. 高级功能 - **安全定义**:添加 OAuth2/JWT 认证 ```yaml securityDefinitions: Bearer: type: apiKey name: Authorization in: header ``` - **数据模型**:定义可复用的数据结构 ```yaml definitions: User: type: object properties: id: type: integer name: type: string ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值