swagger⽣成对应的客户端、服务端代码
根据yaml⽂件⽣成对应的客户端、服务端代码
前⾔
对于早期的webservice接⼝,我们可以根据wsdl⽂件⽣成对应的客户端和服务端代码。那么同样的针对于Restful风格的接⼝,也有同样的根据可以⽣成对应的客户端和服务端代码。这⾥我主要讲解⼀种根据yaml描述⽂档⽣成客户端、服务端代码的⽅式是Swagger。
Swagger介绍
**swagger-core :**⽤于⽣成Swagger API规范的⽰例和服务器集成,可轻松访问REST API
**swagger-codegen :**通过Codegen 可以将描述⽂件⽣成对应的客户端、服务端代码及API⽂档
**swagger-ui :**⼀个⽆依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态⽣成优雅⽂档
**swagger-editor :**swagger官⽅提供的编辑器,⽤于编写API设计⽂档
maven打包本地jar包接下来我会着重介绍下swagger-codegen的使⽤
Swagger-codegen
编译swagger-codegen
1. 执⾏命令,从github上将源码down下来
git clone github/swagger-api/swagger-codegen.git
2. 切换到swagger-codegen⽬录下,执⾏maven打包命令,⽣成swagger-codengen-cli.jar
mvn clean package
3. ⽣成的swagger-codengen-cli.jar在./modules/swagger-codegen-cli/target下,如图所⽰:
swagger-codengen-cli.jar常⽤指令
以下指令需要在swagger-codegen-cli.jar所在的⽬录执⾏
1. 查看帮助⽂档
java -jar swagger-codegen-cli.jar help
2. 查看⽀持的语⾔
java -jar swagger-codegen-cli.jar langs
输出的结果如下,这是当前2.4.13版本⽀持的语⾔如下:
Available languages: [ada, ada-server, akka-scala, android, apache2, apex, aspnetcore, bash, csharp, clojure, cwiki, cpprest, csharp-dotnet2, dart, dart-jag uar, elixir, elm, eiffel, erlang-client, erlang-server, finch, flash, python-flask, go, go-server, groovy, haskell-http-client, haskell, jmeter, jaxrs-cxf-client, jaxrs-c xf, java, inflector, jaxrs-cxf-cdi, jaxrs-spec, jaxrs, msf4j, java-pkmst, java-play-framework, jaxrs-resteasy-eap, jaxrs-resteasy, javascript, javascript-closure-a ngular, java-vertx, kotlin, lua, lumen, nancyfx, nodejs-server, objc, perl, php, powershell, pistache-server, python, qt5cp
p, r, rails5, restbed, ruby, rust, rust-server, scala, scala-gatling, scala-lagom-server, scalatra, scalaz, php-silex, sinatra, slim, spring, dynamic-html, html2, html, swagger, swagger-yaml, swift5, swift4, swift3, swift, php-symfony, tizen, typescript-aurelia, typescript-angular, typescript-inversify, typescript-angularjs, typescript-fetch, typescript-jquery, t ypescript-node, undertow, ze-ph, kotlin-server]
3. 查看调⽤⽣成代码指令⽀持的参数java -jar swagger-codegen-cli.jar help generate,执⾏命令后可以看到有很多的参数以及配置项(输出
结果就不在这⾥贴出来了),但我们常⽤的参数有这么⼏项,⼤部分的参数都可以单独配置到⼀个配置⽂件中,这个待会⼉在下⼀个节点单独介绍。常⽤参数如下:
1. -i : 指定接⼝描述⽂件
2. -c : 指定配置项所在的配置⽂件
3. -D : 指定虚拟机参数。例如指定⽣成代码的groupId:-D --k.demo
4. -l : 指定⽣成代码的语⾔(⽣成客户端和服务端代码的区别就是通过语⾔的不同来区分的)
-o : 指定⽣成代码的路径
4. 查看将要⽣成语⾔的代码⽀持的配置参数,这⾥以java语⾔为例。
java -jar swagger-codegen-cli.jar config-help -l java,输出结果就不在这⾥贴出来了,⼤家可以执⾏下之后看下输出的内容。我这⾥也整理了下,最常⽤的参数有这些,如下:
1. apiPackage:⽣成的api包名
2. modelPackage:⽣成的api包名
3. sourceFolder:⽣成的源码⽂件夹。例如/src/main/java
4. java8:是否⽀持java8。默认false
5. groupId:⽣成的mavne项⽬的坐标groupId
6. artifactId:⽣成的mavne项⽬的坐标artifactId
7. artifactVersion:⽣成的mavne项⽬的坐标artifact版本号
8. artifactDescription:⽣成的mavne项⽬的artifact描述信息
还有⼀些参数时配置开发者信息、联系⽅式等等⽆关痛痒的参数,我就不再这⾥列出了,如果有需要可以适当的配置进去,各取所需吧
通过swagger-code⽣成客户端、服务端代码
提⽰: 这⼀章节只介绍怎么⽣成代码,测试环境见⼀下章节
通过swagger-code⽣成客户端和服务端的代码,⽬前我所知道的有三种,分别如下:
1. 通过swagger-codegen-cli.jar包⽣成
2. 通过java代码来⽣成
3. 通过maven-plugin的⽅式⽣成
接下来将分别介绍如何通过这三种⽅式⽣成代码:
在开始之前,我们得先在本地准备两个配置⽂件,⽤于指定⽣成客户端、服务端代码的配置:
1. 接⼝的描述⽂件(这⾥我们直接拿官⽹提供的接⼝描述⽂件来⽰例,描述⽂件在**./modules/swagger-
codegen/src/test/resources/2_0/petstore.yaml**)。这⾥我们将这个⽂件复制到D:\temp⽬录下去,并修改这个⽂件中的内
容,修改的地⽅如图所⽰:
2. ⽣成代码的公共配置⽂件(也就是上⾯ -c参数需要指定的配置⽂件)
1. 服务端代码配置⽂件
⽂件内容如下:(将其保存为swagger-server.json,保存在D:\tmep\swagger-server⽬录下)
{
"invokerPackage":"k.client",
"apiPackage":"k.client.api",
"modelPackage":"k.client.bean",
"sourceFolder":"src/main/java",
"java8":true,
"dateLibrary":"java8",
"groupId":"k",
"artifactId":"swagger-client",
"artifactVersion":"1.0.0",
"artifactDescription":"This is a demo for generate java client by swagger-codegen."
}
2. 客户端代码配置⽂件
⽂件内容如下:(将其保存为swagger-client.json,保存在D:\tmep\swagger-client⽬录下)
{
"invokerPackage":"k.server",
"apiPackage":"k.server.api",
"modelPackage":"k.server.bean",
"configPackage":"fig",
"java8":true,
"groupId":"k",
"artifactId":"swagger-server",
"artifactVersion":"1.0.0",
"artifactDescription":"This is a demo for generate java server by swagger-codegen."
}
然后将刚刚我们编译的swagger-codegen-cli.jar复制到D:\temp⽬录下。最终的⽬录结构如下图所⽰:
通过swagger-codegen-cli.jar包⽣成
关于swagger-codegen-cli.jar包的使⽤⽅法以及参数介绍,在上⼀章节已经介绍过了,这⾥就直接开始⽣成了,⼜不懂和疑问的地⽅,请联系我。
⽣成服务端代码
指令如下:
java -jar swagger-codegen-cli.jar generate -i .\petstore.yaml -l spring -c .\swagger-server\swagger-server.json -o .\swagger-server
⾄此,服务端代码⽣成成功。
⽣成客户端代码
指令如下:
java -jar swagger-codegen-cli.jar generate -i .\petstore.yaml -l java -c .\swagger-client\swagger-client.json -o .\swagger-client
就这么简单,客户端代码到⽬前为⽌也⽣成成功了。
通过java代码来⽣成
参见编译swagger-codegen章节,我们重新编译下源码,需要将⽣成的swagger-codegen-cli.jar安装到
我们maven的本地的仓库中,然后通过依赖的⽅式加⼊到项⽬中。修改编译的指令为mvn clean package install
1. 我们新建⼀个maven项⽬swagger-codegen-demo,在pom⽂件中加⼊以下依赖
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-cli</artifactId>
<version>2.4.13-SNAPSHOT</version>
</dependency>
2. 新建测试类,添加main⽅法,编写以下代码
k;
import io.airlift.airline.Cli;
import io.airlift.airline.Help;
import d.*;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
Cli.CliBuilder<Runnable> builder =
Cli.<Runnable>builder("swagger-codegen-cli")
.
withDescription(
String.format(
"Swagger code generator CLI (version %s). More info on swagger.io",
"2.4.5"))
.withDefaultCommand(Langs.class)
.withCommands(Generate.class, Meta.class, Langs.class, Help.class,
ConfigHelp.class, Validate.class, Version.class);
// ⽣成客户端代码
builder.build().parse(new String[]{
"generate",
"-i",
"D:\\temp\\petstore.yaml",
"-l",
"java",
"-o",
"D:\\temp\\java\\swagger-client",
"-c",
"D:\\temp\\swagger-client\\swagger-client.json"
}).run();
// ⽣成服务端代码
builder.build().parse(new String[]{
"generate",
"-i",
"D:\\temp\\petstore.yaml",
"-l",
"spring",
"-o",
"D:\\temp\\java\\swagger-server",
"-c",
"D:\\temp\\swagger-server\\swagger-server.json"
}).run();
}
}
3. 这⾥不难发现,其实和我们调⽤的jar包的⽅式⽣成代码是⼀样的,只不过将命令换⼀种⽅式去执⾏⽽已。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论