MCPcopy Index your code
hub / github.com/apache/servicecomb-toolkit

github.com/apache/servicecomb-toolkit @0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.2.0 ↗ · + Follow
2,563 symbols 8,241 edges 639 files 137 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Toolkit | English Build StatusCoverage StatusLicenseQuality Gate Status Gitter

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

1 简介

1.1 目标

  • 提供契约、代码、文档相互转换及校验的能力,帮助用户一键式快速构建基于流行微服务框架和流行编程模型的微服务工程,降低微服务入门成本,使用户聚焦业务开发,提升遗留系统重构、开发效率。

image

1.2 特性

  • 遗留应用提取契约文件

在基于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的代码片段的微服务脚手架

1.3 适用场景

  • 集成多厂商应用的企业

问题:厂商数据、服务标准不一致,开发语言、习惯、框架不一致,集成商难集成,企业难管控。

措施:通过统一定义的接口描述标准(服务契约),使用工具套件一键生成基于指定微服务框架的微服务工程,并且通过服务契约校验手段协同维护整体系统的一致性。以此协调多个开发团队,降低沟通成本且避免后期的混乱。

  • 遗留系统微服务化快速改造

问题:用户需要额外学习和理解微服务及相关框架后,再设计微服务工程,学习成本高。

措施:使用工具套件分析遗留应用提取服务契约,再一键生成基于指定微服务框架的微服务工程后,即可聚焦业务开发,减少用户对微服务框架的学习成本。

2 设计

2.1 主体架构

image

2.2 工作原理

image

3 快速入门

3.1 从源码构建工具和插件

构建环境要求:

# 从github获取toolkit最新源码
$ git clone https://github.com/apache/servicecomb-toolkit.git
$ cd toolkit

# 构建打包
$ mvn clean install

3.2 使用toolkit-maven-plugin插件

3.2.1 配置

在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>

3.2.2 命令

# 生成契约,文档和微服务工程
mvn toolkit:generate

# 校验代码和契约一致性
mvn toolkit:verify

3.2.2.1 解析代码,生成微服务代码工程、OpenAPI规范契约、文档

配置项(不显式设置 <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

3.2.2.2 解析契约,生成微服务工程、文档

配置项(不显式设置 <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

3.2.2.3 代码和契约一致性校验

配置项 例:

<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

3.3 使用toolkit cli工具

3.3.0 获取

  • 如果你使用的是正式发布版本(>=0.2.0),可以在解压二进制包后直接使用里面的脚本文件
  • 在Linux及Mac环境,请使用cli.sh
  • 在Windows环境,请使用cli.cmd

  • 如果你是通过源码构建,可以将cli/scripts/cli.*cli/target/bin/toolkit-cli-{version}.jar放置在同一目录,然后根据不同环境选择不同脚本

以下所有示例均通过Linux环境的cli.sh进行介绍

$ ./cli.sh help

3.3.1 契约生成微服务工程

$ ./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

3.3.2 契约生成文档

$ ./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

3.3.3 契约风格检查

$ ./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.

风格检查规则

3.3.4 契约兼容性检查

$ ./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

兼容性检查规则

3.4 使用案例

可以在这里找到使用插件的一些示例

4 社区互动

5 参与开发

See Pull Request Guide for details.

Extension points exported contracts — how you extend this code

OpenApiValidator (Interface)
OpenAPI Object v [8 implementers]
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/validation/api/OpenApiValidator.java
AnnotationProcessor (Interface)
(no doc) [28 implementers]
oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/annotation/AnnotationProcessor.java
Generator (Interface)
(no doc) [3 implementers]
core/src/main/java/org/apache/servicecomb/toolkit/Generator.java
CompareAlgorithm (Interface)
(no doc) [3 implementers]
common/src/main/java/org/apache/servicecomb/toolkit/common/CompareAlgorithm.java
ValidatorFactoryComponents (Interface)
(no doc)
oas-validator/oas-validator-style/src/main/java/org/apache/servicecomb/toolkit/oasv/style/factory/ValidatorFactoryComponents.java
DirectoryStrategy (Interface)
(no doc)
codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/DirectoryStrategy.java
ParameterValidator (Interface)
Parameter Object</a [7 implementers]
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/validation/api/ParameterValidator.java
IExtensionsContext (Interface)
(no doc) [6 implementers]
oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/IExtensionsContext.java

Core symbols most depended-on inside this repo

create
called by 171
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/validation/factory/OasSpecValidatorFactory.java
validate
called by 116
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/validation/api/OasSpecValidator.java
property
called by 76
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/common/OasObjectPropertyLocation.java
isUpperHyphenCase
called by 43
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/StringCaseUtils.java
getMessage
called by 36
oas-validator/oas-validator-compatibility/src/main/java/org/apache/servicecomb/toolkit/oasv/compatibility/validators/schema/SchemaXmlChangeValidator.java
getName
called by 33
codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java
isLowerCamelCase
called by 32
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/StringCaseUtils.java
isUpperCamelCase
called by 32
oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/StringCaseUtils.java

Shape

Method 1,841
Class 608
Interface 105
Enum 9

Languages

Java100%

Modules by API surface

oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/ParameterContext.java52 symbols
oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/UtilsTest.java47 symbols
oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OperationContext.java41 symbols
oas-validator/oas-validator-compatibility-spring/src/main/java/org/apache/servicecomb/toolkit/oasv/compatibility/config/SchemaDiffValidatorsConfiguration.java37 symbols
oas-validator/oas-validator-core-spring/src/main/java/org/apache/servicecomb/toolkit/oasv/diffvalidation/config/OasDiffValidatorsSkeletonConfiguration.java30 symbols
oas-generator/oas-generator-spring/src/test/java/org/apache/servicecomb/toolkit/generator/SpringAnnotationProcessorTest.java25 symbols
oas-generator/oas-generator-core/src/main/java/org/apache/servicecomb/toolkit/generator/context/OasContext.java25 symbols
common/src/main/java/org/apache/servicecomb/toolkit/common/SplitDiffFormatter.java17 symbols
oas-validator/oas-validator-style/src/test/java/org/apache/servicecomb/toolkit/oasv/style/validator/schema/SchemaPropertiesKeysCaseValidatorTest.java14 symbols
codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java14 symbols
toolkit-maven-plugin/src/test/java/org/apache/servicecomb/toolkit/plugin/TestResourcesEx.java13 symbols
oas-generator/oas-generator-core/src/test/java/org/apache/servicecomb/toolkit/generator/AnnotationProcessorTest.java13 symbols

For agents

$ claude mcp add servicecomb-toolkit \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact