关于java web restful api文档的重新探索

简介: 一款零注解、零侵入的java web接口文档生成工具
谁说生成api文档就必须要定义注解?
谁说生成接口请求和返回示例必须要在线?

用代码去探路,不断尝试更多文档交付的可能性。
如果代码有生命,为什么不换种方式和它对话!

一、背景

没有背景、就自己做自己的背景

在当今各种盛行的前后端分离、restful service开发过程中,接口文档是必不
可少的。对于前后端分离的开发中,后端开发需要将接口写好后需要告诉前端工程师接口的请求参数、响应示例等重要信息,而对于对外暴露的restful接口服务,我们提供接口也是需要具备相同的接口文档的。

但是对于后端工程师来讲,写接口文档将变成一个很大的工作量,虽然现在有类似apidoc、swagger这样的主流接口文档生成工具,但是如果实际用过,会发现这些工具不能满足实际需求,这里拿swagger为例,这个工具最大的优点能是提供在线的api文档,但是它天生就有很强的代码侵入性,要得到一个基本满足需求的api接口文档,必须在代码中使用swagger自定义的注解。这其实给开发人员增加学习成本和工作量,并且就算你使用大量的注解,有许多接口还是无法满足。因此不得不去做一次接口文档工具重新启航探索,api-doc应允而生,用代码去探路,消除繁杂的注解,发现天下没有难写接口文档。

二、api-doc简介

简约而不简单

api-doc是基于java开发用于解决java web restful接口文档书写难和生成难的问题,当然api-doc也是一款零注解完全基于源代码接口定义使用java标准注释生成接口文档的工具。并且api-doc代码也是完全开源的。目前生成的文档格式为markdown。

api-doc的码云仓库链接

github仓库地址链接

三、功能特性

一个都不能少
  • 零注解、零学习成本、只需要写标准java注释。
  • 基于源代码接口定义自动推导
  • 支持springmvc、springboot
  • 目前支持javabean上定义的部分fastjson和jackson注解
  • 支持javabean上基于jsr303参数检验判断参数是否为必须
  • 对json请求参数的接口能够自动生成模拟json参数
  • 对一些常用字段定义能够生成有效的模拟值
  • 支持生成json返回值示例
  • 支持从项目外部加载源代码来生成字段注释
  • 一款代码注解检测工具,明眼leader都知道接口文档直接反馈出注释情况

四、效率成效

效率是做好工作的灵魂。——切斯特菲尔德
  • 直接生成模拟请求参数,提升了团队里的前端和测试的工作效率,试想你让他们去编写json请求参数,如果你不写,鬼知道是什么样。
  • 后端开发只需专注业务和写好标准注释,无需引入额外注解,无需自己编写请求参数示例和响应示例。
  • 接口文档更加标准化

五、缺点

只有看到自己的不足,才能获得进步。
  • 由于基于源代码分析生成文档,因此无法生成在线文档,需要结合地方markdown文档管理工具来管理。
  • 由于源代码分析难度很大,针对很多代码存在潜在的大量的bug.
  • 对泛型返回接口需要明确定义泛型定义,否则无法推导

六、用例

<dependency>
    <groupId>com.github.shalousun</groupId>
    <artifactId>api-doc</artifactId>
    <version>0.5</version>
</dependency>

6.1 定义bean

/**
 * @author yu 2018/8/4.
 */
public class SimpleUser {

    /**
     * 用户名
     */
    @NotNull
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 电话
     */
    private String mobile;

}

6.2 定义接口

/**
 * 用户信息操作接口
 * @author yu 2018/8/4.
 */

@RestController
@RequestMapping("/user")
public class UserController {

    /**
     * 添加用户
     * @param user
     * @return
     */
    @PostMapping("/add")
    public List<SimpleUser> addUser(@RequestBody SimpleUser user){
        return null;
    }
}

启动文档生成

 /**
 * 包括设置请求头,缺失注释的字段批量在文档生成期使用定义好的注释
 */
@Test
public void testBuilderControllersApi() {
    ApiConfig config = new ApiConfig();
    config.setServerUrl("http://localhost:8080");
    config.setStrict(true);
    config.setOutPath("d:\\md");
    //不指定SourcePaths默认加载代码为项目src/main/java下的,如果项目的某一些实体来自外部代码可以一起加载
    config.setSourcePaths(
            SourcePath.path().setDesc("本项目代码").setPath("src/main/java")

           //  SourcePath.path().setPath("E:\\Test\\Mybatis-PageHelper-master\\src\\main\\java"),
           // SourcePath.path().setDesc("加载项目外代码").setPath("E:\\ApplicationPower\\ApplicationPower\\Common-util\\src\\main\\java")
    );

    long start = System.currentTimeMillis();
    ApiDocBuilder.builderControllersApi(config);
    long end = System.currentTimeMillis();
    DateTimeUtil.printRunTime(end, start);
}

生成文档

添加用户

URL: http://localhost:8080/user/add

Type: post

Content-Type: application/json; charset=utf-8

Request-parameters:

Parameter Type Description Required
username string 用户名 true
password string 密码 false
nickName string 昵称 false
mobile string 电话 false

Request-example:

{
    "username":"瑞霖.张",
    "password":"xud2qc",
    "nickName":"rudy.goyette",
    "mobile":"15650966307"
}

Response-fields:

Field Type Description
username string 用户名
password string 密码
nickName string 昵称
mobile string 电话

Response-example:

[
    {
        "username":"浩然.阎",
        "password":"dzlv56",
        "nickName":"kieran.herzog",
        "mobile":"17863739656"
    }
]

demo地址:https://github.com/shalousun/api-doc-test

七、未来定义

期待下一次我们更好的相遇
  • 修改源代码解析的众多的bug
  • 收集使用者的建议,提供非json请求参数的请求示例
  • 收集使用者一些新增功能建议,增加一些必须功能。

八、使用协议

尊重别人,才能让人尊敬。——笛卡尔
  • 任何企业和个人不得用于申请专利

九、使用反馈

分享是一种生活的信念,明白了分享的同时,明白了存在的意义。

Api-doc的发展离不开你的支持,因为出于完全的开源免费,因此您可以基于api-doc的源码解析核心上去做一些自定义的开发来将接口文档数据接入到一些第三方的在线api文档管理系统,例如:CrapApi,但是在请使用者能有一份开源的心态和情怀,积极反馈api-doc的核心代码使用bug和提出改善意见。

由于我个人的开发精力有限,对于是否会将api-doc快速集成推送到第三方优秀的管理工具,短期内可能不会考虑,因此也希望使用者分享一些比较好的集成方案来供大家使用,如果方案比较符合api-doc使用简洁的核心理念,将会直接纳入后续的版本升级中,同时源代码和方案提供者也将纳入api-doc的开发者。

十、祝福

愿你编写接口无数,归来仍是少年
目录
相关文章
|
2天前
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
16天前
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
12天前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
42 11
|
9天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
17天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
1月前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
1月前
|
数据采集 存储 Java
Java爬虫获取微店店铺所有商品API接口设计与实现
本文介绍如何使用Java设计并实现一个爬虫程序,以获取微店店铺的所有商品信息。通过HttpClient发送HTTP请求,Jsoup解析HTML页面,提取商品名称、价格、图片链接等数据,并将其存储到本地文件或数据库中。文中详细描述了爬虫的设计思路、代码实现及注意事项,包括反爬虫机制、数据合法性和性能优化。此方法可帮助商家了解竞争对手,为消费者提供更全面的商品比较。
|
1月前
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
|
1月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
195 5
|
4月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!