061-基于swagger/yapi/openapi逆向生成sdk

1,967 阅读1分钟

这是坚持技术写作计划(含翻译)的第61篇,定个小目标999,每周最少2篇。


本文主要讲解如何基于三方提供的类openapi文档来逆向生成sdk(少掉挨个手敲的烦恼),生成的pojo支持lombok


前置准备

  • Nodejs12 LTS+
  • Java8+
  • Git


研究了swagger自己的 github.com/swagger-api…
微软家的 github.com/Azure/autor…
以及 openapi的 github.com/OpenAPITool…
最后选择了github.com/OpenAPITool…

安装openapi-generator

npm install @openapitools/openapi-generator-cli -g

git clone https://github.com/anjia0532/openapi-generator-templates

openapi-generator-cli generate -t openapi-generator-templates\generator-templates\JavaSpring\spring-boot-lombok-actuator -g spring -puseLombok=true -i swaggerApi.json --skip-validate-spec

参考资料 github.com/OpenAPITool…
参考资料 github.com/anjia0532/o…

生成结果

src                                                                  
└─ main                                                              
   ├─ java                                                           
   │  └─ org                                                         
   │     └─ openapitools                                             
   │        ├─ api           # 调用对方api的client                                        
   │        │  ├─ xxx.java                                         
   │        ├─ configuration # 配置相关                                        
   │        │  ├─ xxx.java                                           
   │        ├─ model         # pojo类                                        
   │        │  ├─ xxx.java                              
   │        ├─ OpenAPI2SpringBoot.java                               
   │        └─ RFC3339DateFormat.java                                
   ├─ resources                                                      
   │  └─ application.properties                                
   │        └─ RFC3339DateFormat.java  
   └─ pom.xml

以实际用到的某个不重要的model类演示下生成的效果

package org.openapitools.model;

import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.openapitools.jackson.nullable.JsonNullable;
import javax.validation.Valid;
import javax.validation.constraints.*;

import lombok.*;

/**
 * EmptyObject2
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2021-04-09T19:10:24.687+08:00[Asia/Shanghai]")
@Getter
@Setter
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class EmptyObject2   {
        /**
         * 获取渠道
         */
        @JsonProperty("getChannel")
        private String getChannel;

        /**
         * 优惠券ID
         */
        @JsonProperty("couponIds")
        private String couponIds;

        /**
         * 会员ID
         */
        @JsonProperty("memberId")
        private String memberId;

}

招聘小广告


山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。
长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。

参考资料