公司法
当前位置: 首页 法律大全

swagger api定义(后端API接口文档)

时间:2023-05-31 作者: 小编 阅读量: 1 栏目名: 法律大全

Swagger是一款RESTFUL接口的文档在线自动生成功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。

前言

作为一个以前后端分离为模式开发小组,我们每隔一段时间都进行这样一个场景:前端人员和后端开发在一起热烈的讨论"哎,你这参数又变了啊","接口怎么又请求不通了啊","你再试试,我打个断点调试一下.."。可以看到在前后端沟通中出现了不少问题。

对于这样的问题,之前一直没有很好的解决方案,直到它的出现,没错...这就是我们今天要讨论的神器:swagger,一款致力于解决接口规范化、标准化、文档化的开源库,一款真正的开发神器。

一:swagger是什么?

Swagger是一款RESTFUL接口的文档在线自动生成 功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。

这个解释简单点来讲就是说,swagger是一款可以根据resutful风格生成的生成的接口开发文档,并且支持做测试的一款中间软件。

二:为什么要使用swaager?

2.1:对于后端开发人员来说

2.2:对于前端开发来说

2.3:对于测试

三:如何搭一个swagger

3.1:引入swagger的依赖

目前推荐使用2.7.0版本,因为2.6.0版本有bug,而其他版本又没有经过验证

一:引入Swagger依赖库<!--引入swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency>

3.2:springBoot整合swagger

@Configuration@EnableSwagger2public class SwaggerConfig {@Beanpublic Docket productApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withMethodannotation(ApiOperation.class))//添加ApiOperiation注解的被扫描.paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title(”swagger和springBoot整合“).description(”swagger的API文档").version("1.0").build();}}

3.3:swagger的注解

swagger的核心在于注解,接下来就着重讲一下swagger的注解:

四:在项目中集成swagger

4.1:在controller中使用注解

package com.youjia.swagger.controller;import com.youjia.swagger.constants.CommonConstants;import com.youjia.swagger.model.Film;import com.youjia.swagger.model.ResultModel;import com.youjia.swagger.service.FilmService;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import io.swagger.annotations.ApiParam;import io.swagger.annotations.ApiResponse;import io.swagger.annotations.ApiResponses;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.util.CollectionUtils;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Objects;/** * @Auther: wyq * @Date: 2018/12/29 14:50 */@RestController@Api(value = "电影Controller", tags = { "电影访问接口" })@RequestMapping("/film")public class FilmController {@Autowiredprivate FilmService filmService;/*** 添加一个电影数据** @param* @return*/@ApiOperation(value = "添加一部电影")@PostMapping("/addFilm")@ApiResponses(value = { @ApiResponse(code = 1000, message = "成功"), @ApiResponse(code = 1001, message = "失败"),@ApiResponse(code = 1002, response = Film.class,message = "缺少参数") })public ResultModel addFilm(@ApiParam("电影名称") @RequestParam("filmName") String filmName, @ApiParam(value = "分数", allowEmptyValue = true) @RequestParam("score") Short score, @ApiParam("发布时间") @RequestParam(value = "publishTime",required = false) String publishTime, @ApiParam("创建者id") @RequestParam("creatorId") Long creatorId) {if (Objects.isNull(filmName) || Objects.isNull(score) || Objects.isNull(publishTime) || StringUtils.isEmpty(creatorId)) {return new ResultModel(ResultModel.failed, "参数错误");}Film filmPOM = new Film();filmPOM.setFilmName(filmName);filmPOM.setScore(score);DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Date publishTimeDate = null;try {publishTimeDate = simpleDateFormat.parse(publishTime);} catch (Exception ex) {ex.printStackTrace();}filmPOM.setPublishTime(publishTimeDate);filmPOM.setCreatorId(creatorId);Boolean result = filmService.addFilm(filmPOM);if (result) {return new ResultModel(CommonConstants.SUCCESSMSG);}return new ResultModel(CommonConstants.FAILD_MSG);}/*** 根据电影名字获取电影** @param fileName* @return*/@GetMapping("/getFilms")@ApiOperation(value = "根据名字获取电影")@ApiResponses(value = { @ApiResponse(code = 1000, message = "成功"), @ApiResponse(code = 1001, message = "失败"),@ApiResponse(code = 1002, message = "缺少参数") })public ResultModel getFilmsByName(@ApiParam("电影名称") @RequestParam("fileName") String fileName) {if (StringUtils.isEmpty(fileName)) {return CommonConstants.getErrorResultModel();}List<Film> films = filmService.getFilmByName(fileName);if (!CollectionUtils.isEmpty(films)) {return new ResultModel(films);}return CommonConstants.getErrorResultModel();}/*** 根据电影名更新** @return*/@PostMapping("/updateScore")@ApiOperation(value = "根据电影名修改分数")@ApiResponses(value = { @ApiResponse(code = 1000, message = "成功"), @ApiResponse(code = 1001, message = "失败"),@ApiResponse(code = 1002, message = "缺少参数") })public ResultModel updateFilmScore(@ApiParam("电影名称") @RequestParam("fileName") String fileName,@ApiParam("分数") @RequestParam("score") Short score) {if (StringUtils.isEmpty(fileName) || Objects.isNull(score)) {return CommonConstants.getErrorResultModel();}filmService.updateScoreByName(fileName, score);return CommonConstants.getSuccessResultModel();}/*** 根据电影名删除电影** @param request* @return*/@PostMapping("/delFilm")@ApiOperation(value = "根据电影名删除电影")@ApiImplicitParams({ @ApiImplicitParam(name = "filmName",value = "电影名",dataType = "String",paramType = "query",required = true), @ApiImplicitParam(name = "id", value = "电影id", dataType = "int", paramType = "query") })public ResultModel deleteFilmByNameOrId(HttpServletRequest request) {//电影名String filmName = request.getParameter("filmName");//电影idLong filmId = Long.parseLong(request.getParameter("id"));filmService.deleteFilmOrId(filmName,filmId);return CommonConstants.getSuccessResultModel();}/*** 根据id获取电影** @param id* @return*/@PostMapping("/{id}")@ApiOperation("根据id获取电影")@ApiImplicitParam(name = "id", value = "电影id", dataType = "long", paramType = "path", required = true)public ResultModel getFilmById(@PathVariable Long id) {if (Objects.isNull(id)) {return CommonConstants.getLessParamResultModel();}Film film = filmService.getFilmById(id);if (Objects.nonNull(film)) {return new ResultModel(film);}return CommonConstants.getErrorResultModel();}/*** 修改整个电影** @param film* @return*/@PostMapping("/insertFilm")@ApiOperation("插入一部电影")public ResultModel insertFilm(@ApiParam("电影实体对象") @RequestBody Film film) {if (Objects.isNull(film)) {return CommonConstants.getLessParamResultModel();}Boolean isSuccess = filmService.insertFilm(film);if (isSuccess) {return CommonConstants.getSuccessResultModel();}return CommonConstants.getErrorResultModel();}}

4.2:访问本地链接

http://localhost:8080/swagger-ui.html#/

可以看出访问的url都很清晰的展示在它最终的页面上,我们打开一个方法:可以看出方法的请求参数清晰的的罗列出来,包括方法的返回值。并且有一个很重要的功能,只需要点下方的try it out就可以进行接口测试,

五:使用swagger需要注意的问题六:总结

swagger作为一款辅助性的工具,能大大提升我们的和前端的沟通效率,接口是一个非常重要的传递数据的媒介,每个接口的签名、方法参数都非常重要。一个良好的文档非常重要,如果采用手写的方式非常容易拼写错误,而swagger可以自动化生成参数文档,这一切都加快了我们的沟通效率。并且可以替代postman的作用。实在是开发编程必备良品啊。

,
    推荐阅读
  • 排骨煨山药的做法窍门(排骨炖山药怎么做好吃)

    下面内容希望能帮助到你,我们来一起看看吧!排骨煨山药的做法窍门排骨洗净,剁块装盘备用。山药与胡萝卜去片,滚刀切。倒入开水焯过一遍。萝卜和排骨倒入沙锅炖2小时左右。胡萝卜比山药难熟,先煮5分钟左右。最后是下盐,排骨炖山药装碗撒上葱花就可以食用了。

  • 怎么一吃不健康的食物就长痘(怎么一吃不健康的食物就长痘痘)

    油脂分泌过多如果没有及时的清洁就会容易堵塞住毛孔。

  • 资金时间价值可以用来表示(资金时间价值可用通货膨胀率极低情况下的国债利率来表示)

    下面希望有你要的答案,我们一起来看看吧!资金时间价值可以用来表示资金时间价值可以用通货膨胀率极低情况下的国债利率来表示。资金的时间价值是指资金在运动过程中,随着时间的推移而产生的增值。国债的利率是根据购买的额度和国债利率进行计算得到的。一般3年期国债利率在4%左右,5年期国债利率在4.4%左右,而且国债付息的方式也是不一样的。

  • 脸上有老年斑用什么洗脸(年轻人也长老年斑)

    日晒是老年斑形成的主要原因,做好防晒是预防老年斑的重要手段。运动可以促进机体的血液循环和新陈代谢,排出有害毒素以防止或延缓老年斑的发生与进展。另外,运动还可使身心放松,也能帮助预防老年斑。值得注意的是,肝肾疾病、内分泌紊乱可能会影响新陈代谢功能,进而导致老年斑的发生,所以发现此类疾病要积极治疗。此外,老年斑一般不影响健康,只影响美观,如考虑美观因素可采用冷冻、激光等方式治疗,也可通过手术切除。

  • 迷你熨斗的使用技巧(迷你熨斗的使用技巧视频)

    迷你蒸汽熨斗—地线接地看完说明书,开始使用迷你蒸汽熨斗的时候,应该先将电熨斗电源芯线中的黄、绿双色线接地,这样做的目的是为了防止出现漏电情况,造成触电危险,危害到人体健康。电熨斗若装有水位玻璃,可观察储水器内水位高低,根据需要进行加水。

  • 有关冬天的诗句(有关冬天的诗句集锦)

    有关冬天的诗句晚来天欲雪,能饮一杯无。——白居易《问刘十九》朔风如解意,容易莫摧残。——崔道融《梅花》千山鸟飞绝,万径人踪灭。——柳宗元《江雪》冰雪林中著此身,不同桃李混芳尘;——王冕《白梅》孤舟蓑笠翁,独钓寒江雪。——柳宗元《江雪》墙角数枝梅,凌寒独自开。——刘长卿《逢雪宿芙蓉山主人》江南几度梅花发,人在天涯鬓已斑。——王昌龄《从军行七首·其四》乱山残雪夜,孤烛异乡人。

  • 黄山简介资料(关于黄山的资料)

    位于安徽省南部黄山市境内,有72峰,主峰莲花峰海拔1864米,与光明顶、天都峰并称三大黄山主峰,为36大峰之一。黄山是安徽旅游的标志,是中国十大风景名胜唯一的山岳风光。现为世界文化与自然双重遗产,世界地质公园,国家AAAAA级旅游景区,国家级风景名胜区,全国文明风景旅游区示范点。2017年12月,入选教育部第一批全国中小学生研学实践教育基地、营地名单。2018年9月28日起,黄山风景区门票价从230元调整至190元。

  • 2022洛阳博物馆十一国庆节假期开放公告

    尊敬的观众朋友:国庆假期将至,为满足广大观众假日文化需求,现将洛阳博物馆2022年国庆假期开放时间安排如下:一、开放时间2022年10月1日至10月7日正常开放,10月10日恢复例行周一闭馆。洛阳市域外来馆游客,入馆时须提供48小时内核酸检测阴性证明。洛阳博物馆2022年9月28日

  • 苹果手机怎么换id账号和密码(如何更换苹果手机id账号和密码)

    以下内容希望对你有帮助!苹果手机怎么换id账号和密码首先我们打开苹果手机上面的应用进入到系统里面。接着,我们点击一下最上方的AppleID、iCloud、iTunes与AppStore一栏。进入之后页面下拉至底部,可以看到选项,点击退出。然后输入AppleID账号密码验证一下,点击关闭即可退出苹果登录的AppleID账号。还有在退出时,会提示您是否保留在手机里面的通讯录或者游览器记录等数据时,根据个人需要注销时如果想要留数据的话,注意一下点击保留按钮。

  • 怎么降低屏幕亮度(电脑降低屏幕亮度的步骤)

    打开电脑桌面上的“计算机”,双击打开进入点击打开“控制面板”点击打开外观和个性化,今天小编就来聊一聊关于怎么降低屏幕亮度?接下来我们就一起去研究一下吧!点击打开左侧”硬件和声音“,点击打开NVIDIA控制面板。点开显示,调整桌面颜色设置,勾选使用NVIDIA设置,就可以拉动亮度按钮来调屏幕亮度了,调完之后,点应用就可以了。