如何使用apidoc来自动更新API文档
来源:互联网 发布:aplusvable知乎 编辑:程序博客网 时间:2024/04/28 00:18
如何使用apidoc来自动更新API文档
安装apidoc
使用nodejs来进行安装
npm install apidoc -g
在项目路径下创建apiodc.josn文件
可以参考如下的格式来进行设置
{ "name": "EnergyRiver API", "version": "1.0.0", "description": "EnergyRiver API 使用文档", "title": "EnergyRiver API 使用说明", "url" : "http://localhost/public/doc/index.html", "order": [ "Index", "Get", "Post", "Update", "Delete", "Overview", "Comment" ], "header": { "title":"GENERAL", "filename": "src/main/webapp/public/doc/header.md" }}
将如上文件保存到apidoc.josn文件
创建文档的header
由于我们一般会api的访问地址,因此我们可以选择把api文档放在webapp下面。header.md是用来作为整个文档页面的头部信息出现的。
在apidoc.json文件中,我们指定了filename=src/main/webapp/public/doc/header.md
方法注释模板
注意:一般为了保证文档格式不被编辑器更改,使用/*
,而不是/**
来开启注释,
但是/*
开启的注释,是不能被识别的,所以,注释必须以/**
开始,编写过程尽量不要使用IDE的格式化功能。
/** * @api {get} /build/getBuildingInfo 获取所有建筑单元的信息 * @apiName getBuildingInfo * @apiGroup build * @apiVersion 1.0.0 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * "code": 200, * "data": "建筑单元实际数据数组", * "total": "总共数量" * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": null, * "total": 0 * } */ @RequestMapping(value = "/getBuildingInfo") @ResponseBody public Map<String, Object> getBuilingInfo(HttpServletRequest request) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); // 按照userID来显示该用户登录时显示的建筑 Map<String, Object> map = new HashMap<>(); List<BuildingInfo> buildingInfos; if (loginInfo != null) { Long userID = AuthUtil.getUserId(request); buildingInfos = buildingInfoService.getbuildingInfo(userID); map.put("code", 200); map.put("data", buildingInfos); map.put("total", buildingInfoService.getAllCount()); } else { map.put("code", 401); map.put("data", null); map.put("total", 0); } return map; }
生成文档
可以使用gitbash,在项目根路径下执行
$ apidoc -i src/main/java/ -o src/main/webapp/public/doc/
如果没有报错的话,就可以执行在public/doc中看到生成的文件了。
访问文档
打开public/doc/index.html就可以访问了
定制样式
可以更改public/doc/css/style.css的内容来自定义api页面的样式
附加一个完整的demo
package cn.b507.ssm.controller.Build;import cn.b507.ssm.po.Build.BuildingInfo;import cn.b507.ssm.po.Build.BuildingType;import cn.b507.ssm.service.Build.BuildingInfoService;import cn.b507.ssm.tool.token.AuthUtil;import com.alibaba.fastjson.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;import java.util.HashMap;import java.util.List;import java.util.Map;/** * <p> * Title: BuildingInfoController * </p> * <p> * Description:与建筑单元信息相关的业务需求处理controller * </p> * * @version 1.0 * @date 2017-4-17 */@Controller@RequestMapping("/build")public class BuildingInfoController { @Autowired private BuildingInfoService buildingInfoService; /** * @api {get} /build/getBuildingInfo 获取所有建筑单元的信息 * @apiName getBuildingInfo * @apiGroup build * @apiVersion 1.0.0 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * "code": 200, * "data": "建筑单元实际数据数组", * "total": "总共数量" * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": null, * "total": 0 * } */ @RequestMapping(value = "/getBuildingInfo") @ResponseBody public Map<String, Object> getBuilingInfo(HttpServletRequest request) throws Exception { // 从session拿到token,再解密得到userid Long userID; if(request.getParameter("userID")!=null) userID = Long.parseLong(request.getParameter("userID")); else userID = AuthUtil.getUserId(request); Map<String,Object>map = new HashMap<>(); if (userID != null) { List<BuildingInfo> buildingInfos = buildingInfoService.getbuildingInfo(userID); map.put("code", 200); map.put("data", buildingInfos); map.put("total", buildingInfoService.getAllCount(userID)); } else { map.put("code", 401); map.put("data", null); map.put("total", 0); } return map; } /** * @api {get} /build/getBuildingInfoByID 根据建筑id来查询建筑的信息 * @apiName getBuildingInfoByID * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {Number} buildingID 某个建筑单元的id * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * "code": 200, * "data": "建筑单元实际数据数组" * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": null * } */ @RequestMapping(value = "/getBuildingInfoByID") @ResponseBody public Map<String, Object> getBuildingInfoByID(HttpServletRequest request, Long buildingID) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); // 按照userID来显示该用户登录时显示的建筑 BuildingInfo buildingInfos; Map<String, Object> map = new HashMap<>(); if (loginInfo != null) { buildingInfos = buildingInfoService .getBuildingInfoByBuildingID(buildingID); map.put("code", 200); map.put("data", buildingInfos); } else { map.put("code", 401); map.put("data", null); } return map; } /** * @api {get} /build/updateBuildingInfo 根据建筑id来修改建筑的信息 * @apiName updateBuildingInfo * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {String} buildingInfo 某个建筑单元的更新后的信息 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * "code": 200, * "result": true/false * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": false * } */ @RequestMapping(value = "/updateBuildingInfo") @ResponseBody public Map<String, Object> getBuildingInfoByID(HttpServletRequest request, String buildingInfo) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); // 按照userID来显示该用户登录时显示的建筑 Boolean result; Map<String, Object> map = new HashMap(); if (loginInfo != null) { result = buildingInfoService.updateBuildingInfo(buildingInfo); map.put("code", 200); map.put("result", result); } else { map.put("code", 401); map.put("result", false); } return map; } /** * @api {get} /build/getUpperBuilding 获取上级建筑的相关信息 * @apiName getUpperBuilding * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {String} upperBuilding 上级建筑单元的json数据信息 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * "code": 200, * "result": true/false * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": false * } */ @ResponseBody @RequestMapping(value = "/getUpperBuilding", produces = "application/json;charset=UTF-8") public String getUpperBuilding(HttpServletRequest request, String upperBuilding) throws Exception { JSONObject jsonObject = JSONObject.parseObject(upperBuilding); return jsonObject.toJSONString(); } /** * @api {get} /build/saveChildBuildInfo 保存下级建筑的添加信息 * @apiName saveChildBuildInfo * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {String} childBuild 下级建筑单元的json数据信息 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * “code": 200, * "result": true/false * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": false * } */ @ResponseBody @RequestMapping(value = "/saveChildBuildInfo") public Map<String, Object> saveChildBuildInfo(HttpServletRequest request, String childBuild) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> map = new HashMap(); Long userID = AuthUtil.getUserId(request); if (userID != null) { // 利用创建人和下级建筑信息添加下级建筑 childBuild = childBuild.substring(1, childBuild.length() - 1);//去除引号 childBuild = childBuild.replace("\\", ""); boolean result = buildingInfoService.addChildBuild(userID, childBuild); map.put("code", 200); map.put("result", result); } else { map.put("code", 401); map.put("result", false); } return map; } /** * @api {get} /build/deleteBuild 删除建筑 * @apiName deleteBuild * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {Number} buildingID 建筑单元ID * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * “code": 200, * "result": true/false * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": false * } */ @ResponseBody @RequestMapping(value = "/deleteBuild") public Map<String, Object> deleteBuild(HttpServletRequest request, Long buildingID) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); Map<String, Object> map = new HashMap(); // 按照userID来显示该用户登录时显示的建筑 //Boolean result; if (loginInfo != null) { boolean result = buildingInfoService.deleteBuildingInfo(buildingID); map.put("code", 200); map.put("result", result); } else { map.put("code", 401); map.put("result", false); } return map; } /** * @api {get} /build/setLngAndLat 将建筑位置的地图坐标(经度,纬度)保存 * @apiName setLngAndLat * @apiGroup build * @apiVersion 1.0.0 * * @apiParam {String} coordinate 经纬度信息json数据 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * “code": 200, * "result": true/false * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * "code": 401, * "data": false * } */ @ResponseBody @RequestMapping(value = "/setLngAndLat", produces = "application/json;charset=UTF-8") public Map<String, Object> setLngAndLat(HttpServletRequest request, String coordinate) throws Exception { // 从session拿到token,再解密得到userid Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); Map<String, Object> map = new HashMap(); if (loginInfo != null) { // 将地图坐标(经纬度)保存入建筑信息 boolean result = buildingInfoService.saveLngAndLat(coordinate); map.put("code", 200); map.put("result", result); } else { map.put("code", 401); map.put("result", false); } return map; } /** * @api {get} /build/getBulidInfoByUser 获取用户所在机构对应的建筑单元 * @apiName getBulidInfoByUser * @apiGroup build * @apiVersion 1.0.0 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * json数据 * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * null/[] * } */ @RequestMapping(value = "/getBulidInfoByUser", produces = "application/json;charset=UTF-8") @ResponseBody public List<BuildingInfo> getBulidInfoByUser(HttpServletRequest request) throws Exception { //从session拿到token,再解密得到userid Long userID = AuthUtil.getUserId(request); List<BuildingInfo> buildingInfos = buildingInfoService.getBuildInfoByUser(userID); return buildingInfos; } /** * @api {get} /build/getALLbuilingType 获取所有的建筑类型 * @apiName getALLbuilingType * @apiGroup build * @apiVersion 1.0.0 * * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * [ * { * “code”: 200, * "data": "json数据" * } * ] * @apiErrorExample {json} Error-Response: * HTTP/1.1 401 UNAUTHORIZED * { * “code”: 401, * "data": null * } */ @RequestMapping(value = "/getALLbuilingType") @ResponseBody public Map<String, Object> getALLbuilingType(HttpServletRequest request) throws Exception { Map<String, Object> loginInfo = AuthUtil.getClientLoginInfo(request); Map<String, Object> map = new HashMap(); if (loginInfo != null) { List<BuildingType> buildingTypes = buildingInfoService.getALLbuilingType(); map.put("code", 200); map.put("data", buildingTypes); } else { map.put("code", 401); map.put("data", null); } return map; } public BuildingInfoService getBuildingInfoService() { return buildingInfoService; } public void setBuildingInfoService(BuildingInfoService buildingInfoService) { this.buildingInfoService = buildingInfoService; }}
阅读全文
0 0
- 如何使用apidoc来自动更新API文档
- 使用apidoc生成restful-api文档:安装nodejs+npm+apidoc
- 使用apidoc 生成Restful web Api文档
- 使用apidoc 生成Restful web Api文档
- apidoc ----api文档生成工具的使用
- 使用apidoc 生成Restful web Api文档
- apidoc 生成api文档
- 使用apidoc自动生成rest风格api接口文档
- 【推荐】apidoc api文档生成工具的使用(mac)
- Web API文档生成工具apidoc 的使用步骤
- api文档生成器apidoc的安装和使用
- apidoc使用教程-编写漂亮的api文档
- apidoc 安装与使用示例生成 Api文档
- ApiDoc 自动生成API文档
- 使用apidoc生成接口文档
- 丢掉word,用apidoc来写文档
- Web API文档生成工具apidoc
- apidoc 生成Restful web Api文档
- 数组方法和字符串方法对比
- Promise -- 承诺
- nginx平滑升级添加ssl实现站内https
- [py]Django 提供的 QuerySet API操作db
- python中的map()函数
- 如何使用apidoc来自动更新API文档
- ubuntu16切换hosts软件安装
- JVM---虚拟机类加载机制与类加载器
- nyoj1057 寻找最大数(三)
- POJ 3268 Silver Cow Party(最短路径之迪杰斯特拉算法)
- 【斜率优化DP】BZOJ1597 [Usaco2008 Mar]土地购买
- Lego机器人学习小记
- 去除ArrayList集合中的重复字符串元素
- 死锁-嵌套容易发生死锁