最近經常被問 https://t.itmuch.com/doc.html 文檔頁是怎麼製作的,考慮到步驟略複雜,寫篇手記總結下吧。
TIPS
https://t.itmuch.com/doc.html 是個人在慕課網視頻《 面向未來微服務:Spring Cloud Alibaba從入門到進階[1] 》的實戰項目配套文檔。
效果
總體步驟
•整合Swagger,生成Swagger描述端點 /v2/api-docs
•使用 swagger2markup-maven-plugin ,將 /v2/api-docs 生成ASCIIDOC文件;
•使用 asciidoctor-maven-plugin ,將ASCIIDOC文件轉換成HTML;
•部署
整合Swagger
TIPS
Swagger的使用非常簡單,本文不展開探討了,各位看官自行百度一下用法吧。
常用註解:
•@Api
•@ApiOperation
•@ApiModel
•@ApiModelProperty
1 加依賴
<dependency>
<groupid>io.springfox/<groupid>
<artifactid>springfox-swagger2/<artifactid>
<version>2.9.2/<version>
<exclusions>
<exclusion>
<groupid>io.swagger/<groupid>
<artifactid>swagger-annotations/<artifactid>
/<exclusion>
<exclusion>
<groupid>io.swagger/<groupid>
<artifactid>swagger-models/<artifactid>
/<exclusion>
/<exclusions>
/<dependency>
<dependency>
<groupid>io.springfox/<groupid>
<artifactid>springfox-swagger-ui/<artifactid>
<version>2.9.2/<version>
/<dependency>
<dependency>
<groupid>io.swagger/<groupid>
<artifactid>swagger-annotations/<artifactid>
<version>1.5.21/<version>
/<dependency>
<dependency>
<groupid>io.swagger/<groupid>
<artifactid>swagger-models/<artifactid>
<version>1.5.21/<version>
/<dependency>
2 配置Swagger(按照自己的需要配置,下面的配置代碼僅供參考)
/**
* @author itmuch.com
*/
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
/**
* swagger 信息
*
* @return 頁面信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("ITMuch API")
.description("ITMuch API")
.termsOfServiceUrl("")
.version("1.0.0")
.contact(new Contact("", "", "")).build();
}
@Bean
public Docket customImplementation() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.itmuch"))
.paths(PathSelectors.any())
.build()
.apiInfo(this.apiInfo());
//.globalOperationParameters(parameters);
}
}
3 為接口Swagger註解
@RestController
@RequestMapping("/notices")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Api(tags = "公告相關接口", description = "公告相關接口")
public class NoticeController {
/**
* 查詢最新的一條公告
*
* @return 公告列表
*/
@GetMapping("/newest")
@ApiOperation(value = "查詢最新的一條公告", notes = "用於:公告")
public Notice findNewest() {
return new Notice();
}
}
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@ApiModel("公告")
public class Notice {
/**
* ID
*/
@ApiModelProperty("id")
private Integer id;
/**
* 公告內容
*/
@ApiModelProperty("公告內容")
private String content;
...
}
這樣,應用啟動完成後,就會有一個/v2/api-docs 端點,描述了你的API的信息。
生成ASCIIDOC
在pom.xml中添加如下內容:
<build>
<plugins>
<plugin>
<groupid>io.github.swagger2markup/<groupid>
<artifactid>swagger2markup-maven-plugin/<artifactid>
<version>1.3.1/<version>
<configuration>
<swaggerinput>http://localhost:8080/v2/api-docs/<swaggerinput>
<outputfile>src/docs/asciidoc/generated/all/<outputfile>
<config>
<swagger2markup.markuplanguage>ASCIIDOC/<swagger2markup.markuplanguage>
<swagger2markup.pathsgroupedby>TAGS/<swagger2markup.pathsgroupedby>
/<config>
/<configuration>
/<plugin>
...
/<plugins>/<build>
swagger2markup-maven-plugin 插件的作用是讀取 http://localhost:8080/v2/api-docs 的信息,生成ASCIIDOC文檔。當然你也可以生成其他格式,比如Markdown等等。
這款插件還有很多使用姿勢,詳見 https://github.com/Swagger2Markup/swagger2markup-maven-plugin[2]
生成HTML
下面,只需要將ASCIIDOC轉換成html就OK了,在pom.xml中添加如下內容:
<build>
<plugins>
<plugin>
<groupid>org.asciidoctor/<groupid>
<artifactid>asciidoctor-maven-plugin/<artifactid>
<version>1.5.6/<version>
<configuration>
<sourcedirectory>src/docs/asciidoc/generated/<sourcedirectory>
<outputdirectory>src/docs/asciidoc/html/<outputdirectory>
<backend>html/<backend>
<sourcehighlighter>coderay/<sourcehighlighter>
<attributes>
<doctype>book/<doctype>
left
<toclevels>3/<toclevels>
<numbered>
<hardbreaks>
<sectlinks>
<sectanchors>
/<attributes>
/<configuration>
/<plugin>
/<plugins>/<build>
asciidoctor-maven-plugin 插件同樣也有很多姿勢,詳見:https://github.com/asciidoctor/asciidoctor-maven-plugin[3]
生成的文件在 src/docs/asciidoc/html (看你插件上面的配置哈),然後你就可以弄個NGINX部署了。
乾貨分享
最近將個人學習筆記整理成冊,使用PDF分享。關注我,回覆如下代碼,即可獲得百度盤地址,無套路領取!
•001:《Java併發與高併發解決方案》學習筆記;
•002:《深入JVM內核——原理、診斷與優化》學習筆記;
•003:《Java面試寶典》
•004:《Docker開源書》
•005:《Kubernetes開源書》
•006:《DDD速成(領域驅動設計速成)》
References
[1] 面向未來微服務:Spring Cloud Alibaba從入門到進階: https://coding.imooc.com/class/358.html
[2]: https://github.com/Swagger2Markup/swagger2markup-maven-plugin
[3]: https://github.com/asciidoctor/asciidoctor-maven-plugin
閱讀更多 IT牧場 的文章