Apache ServiceComb Toolkit 是基于契约的微服务开发工具套件

在基于SpringMVC/POJO/JAX-RS模型开发的应用中,一键提取符合OpenAPI规范的服务契约文件。
输入符合OpenAPI规范的服务契约,一键生成以ServiceComb/SpringCloud/Swagger为底座,以及以SpringMVC/POJO/JAX-RS或SpringBoot为开发模型的微服务项目。
校验应用的实际实现(如数据和服务API)是否与样本服务契约描述一致。
风格校验检查契约是否符合[OAS 3.0.2规范][openapi-3.0.2]以及自定义的规则; 兼容性校验检查新旧两个版本的OAS的兼容性
输入符合OpenAPI规范的服务契约,一键生成html格式的文档。
Todo List
支持gradle plugin, eclipse plugin, intellij plugin。
支持word、pdf等流行格式文档。
支持契约增量生成代码。
工具能力服务化。
Server端自动/半自动测试
Interface匹配性校验
支持生成包含连接Mysql/Redis等常见DB的代码片段的微服务脚手架
问题:厂商数据、服务标准不一致,开发语言、习惯、框架不一致,集成商难集成,企业难管控。
措施:通过统一定义的接口描述标准(服务契约),使用工具套件一键生成基于指定微服务框架的微服务工程,并且通过服务契约校验手段协同维护整体系统的一致性。以此协调多个开发团队,降低沟通成本且避免后期的混乱。
问题:用户需要额外学习和理解微服务及相关框架后,再设计微服务工程,学习成本高。
措施:使用工具套件分析遗留应用提取服务契约,再一键生成基于指定微服务框架的微服务工程后,即可聚焦业务开发,减少用户对微服务框架的学习成本。


构建环境要求:
# 从github获取toolkit最新源码
$ git clone https://github.com/apache/servicecomb-toolkit.git
$ cd toolkit
# 构建打包
$ mvn clean install
在maven项目的pom文件中配置
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0</version>
<configuration>
<sourceType>code</sourceType>
<contractFileType>yaml</contractFileType>
<documentType>html</documentType>
<outputDirectory>./target</outputDirectory>
<contractLocation>./contract</contractLocation>
<sourceContractPath>./target/contract</sourceContractPath>
<destinationContractPath>./contract</destinationContractPath>
<service>
<serviceType>all</serviceType>
<groupId>domain.orgnization.project</groupId>
<artifactId>sample</artifactId>
<artifactVersion>0.1.0-SNAPSHOT</artifactVersion>
<packageName>domain.orgnization.project.sample</packageName>
<microServiceFramework>ServiceComb</microServiceFramework>
<providerServiceId>servicecomb-provider</providerServiceId>
<serviceId>servicecomb-consumer</serviceId>
</service>
<additionalProperties>
<prop1>value</prop1>
<prop2>value</prop2>
...
<propN>value</propN>
</additionalProperties>
</configuration>
</plugin>
# 生成契约,文档和微服务工程
mvn toolkit:generate
# 校验代码和契约一致性
mvn toolkit:verify
配置项(不显式设置 <configuration> 则使用默认配置)
例:
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0</version>
<configuration>
<sourceType>code</sourceType>
<outputDirectory>./target</outputDirectory>
<service>
<serviceType>all</serviceType>
</service>
</configuration>
</plugin>
运行命令
mvn toolkit:generate
代码生成契约现已支持以下注解(类级别)编写的restful接口
RestController, RestSchema, RpcSchema, RequestMapping
代码生成契约时,restful接口方法修饰符必须指定为public
配置项(不显式设置 <configuration> 则使用默认配置)
例:
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0</version>
<configuration>
<sourceType>contract</sourceType>
<contractLocation>./contract</contractLocation>
<outputDirectory>./target</outputDirectory>
<service>
<serviceType>provider</serviceType>
</service>
</configuration>
</plugin>
运行命令
mvn toolkit:generate
配置项 例:
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0</version>
<configuration>
<sourceType>code</sourceType>
<destinationContractPath>./contract</destinationContractPath>
</configuration>
</plugin>
运行命令
mvn toolkit:verify
在Windows环境,请使用cli.cmd
如果你是通过源码构建,可以将cli/scripts/cli.*与cli/target/bin/toolkit-cli-{version}.jar放置在同一目录,然后根据不同环境选择不同脚本
以下所有示例均通过Linux环境的cli.sh进行介绍
$ ./cli.sh help
$ ./cli.sh codegenerate -m ServiceComb -i swagger.yaml -o ./project -p SpringMVC
codegenerate 命令选项说明: * -m, --microservice-framework : 指定微服务框架,现支持ServiceComb
例:-m ServiceComb * -p, --programming-model : 指定编程模型,可选JAX-RS,POJO,SpringMVC,SpringBoot
例:-p SpringMvc * -i, --input : 指定遵循OpenAPI规范的契约文件,支持yaml和json格式,支持指定本地和网络文件
例:-i http://petstore.swagger.io/v2/swagger.json * -o, --output : 生成的项目代码输出路径
例:-o ./project * --group-id : 指定生成的项目的group id
例:--group-id com.demo * --artifact-id : 指定生成的项目的artifact id
例:--artifact-id springmvc-example * --artifact-version : 指定生成的项目的artifact version
例:--artifact-version 1.0.0 * --api-package : 指定生成项目的api package
例:--api-package com.demo.api * --model-package : 指定生成项目的model package
例:--model-package com.demo.model * -t, --service-type : 指定生成的微服务项目的微服务类型。可选值为provider,consumer,all
例:--service-type provider * --properties : 指定额外的属性值,这些属性值可以被mustach模板引用 例:--properties applicationId=app,providerServiceId=provider
$ ./cli.sh docgenerate -i swagger.yaml -o ./document
docgenerate 命令选项说明: * -i, --input : 指定遵循OpenAPI规范的契约文件,支持yaml和json格式,支持指定本地和网络文件
例:-i http://petstore.swagger.io/v2/swagger.json * -o, --output : 文档输出路径
例:-o ./document * -f, --format : 指定输出文档风格,现支持swagger-ui 例:-f swagger-ui
$ ./cli.sh checkstyle -r style-check-rules.yaml -f oas.yaml
or
$ ./cli.sh cs -r style-check-rules.yaml -f oas.yaml
checkstyle Command argument * -r, --rules-file. Rules properties file. * -f, --file. OpenAPI v3 spec yaml.
$ ./cli.sh checkcompatibility left-oas.yaml right-oas.yaml
或者
$ ./cli.sh cc left-oas.yaml right-oas.yaml
checkcompatibility Command argument * <files> Two OpenAPI v3 spec yaml file
可以在这里找到使用插件的一些示例
See Pull Request Guide for details.
$ claude mcp add servicecomb-toolkit \
-- python -m otcore.mcp_server <graph>