导入数据模型
为了方便用户快速生成数据模型,API 网关支持通过 Proto 文件和 Swagger 文件来快速导入数据模型。
操作步骤
登录 API 网关控制台。
在左侧导航栏单击 API 发布> 数据模型,进入数据模型页面。
在页面右上角单击 导入数据模型,在弹出的窗口中配置数据模型信息。
选择导入类型:API 网关提供Swagger 和 ProtoBuf 两种数据模型的导入,您可以根据实际业务需求进行选择。
Swagger 模型:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
ProtoBuf 模型:ProtoBuf 是一个开源的结构化信息传递工具,用于数据存储、传输协议格式等场景。
导入方式:
URL:输入swagger配置的 URL地址,将远程的数据模型解析后,上传至 API 网关平台。
FILE:选择好导入类型后,单击 上传文件,将swagger的 2.0 版本 或 3.0 版本的 json 或yaml 文件,上传至 API 网关平台。
性能优化:
说明导入类型为 ProtoBuf,Swagger 时,都无需输入模型名称。
API 网关会从 Swagger 2.0 文件中的 Model 或 Swagger 文件 3.0 中的 Schema 解析参数名称,参数结构,参数类型并转换后导入数据模型,可直接在 API 中自动生成示例入参的 JSON,数据模型也可直接在流程编排中进行参数配置,参数映射等。
完成后单击 确定,完成数据模型的导入。
数据模型导入成功后,后续在创建 API 配置请求/响应参数时,您可以直接选择对应的数据模型进行绑定。
其他操作
生成 SDK
为了方便您调用 API 接口,同时为了避免重复编写接口代码,API 网关提供下载 SDK 的操作,简化编写代码的同时,满足您对外输出 SDK 的需求。
目前 API 网关支持从 分组 和 应用 两个维度下载 SDK,以下操作步骤以 分组 角度为例。
登录 API 网关控制台。
在左侧导航栏单击 API 发布 > API 分组,进入 API 分组页面。
在分组列表右侧单击 下载 SDK。
在分组详情页配置下载 SDK 的信息。
包名:必填,用于生成类的包名。
代码语言:选择下载 SDK 的代码语言,目前仅支持 java。
完成后单击 下载,完成 SDK 的生成。
说明下载后的 SDK 形式为 zip文件,您可以将 zip 包里面的 Java 类文件导入对应项目中用于 SDK 的调用。
注意事项
网关 SDK 生成不支持的数据类型
容器类型不能多层嵌套。
List 或 Map 必须有泛型信息。
List 或 Map 的泛型信息不能是 Array 类型。
不支持单字节(字节数据 byte[] 是支持的。)
不支持对象数组,请用 List 代替。
属性名不能是
data
和description
,会与 iOS 的属性冲突。Map 类型的 key 必须是 String 类型。
Map 类型的 value 不能是 Object 类型。
类型不能是抽象类。
类型不能是接口类。
错误的写法为:
public class Req {
private Map<String,List<Person>> map; //容器类型不能多层嵌套。
private List<Map<Person>> list; //容器类型不能多层嵌套。
private List list1; //List或Map必须有泛型信息。
private Map map1; //List或Map必须有泛型信息。
private List<Person[]> listArray; //List或Map的泛型信息不能是Array类型。
private byte b; //不能为单字节
private Person[] personArray; //不支持对象数组,请用List代替
private String description; //属性名不能description
}
网关 SDK 生成支持的数据类型
boolean, double, float, int, long, short
java.lang.Boolean
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.util.List,但:必须使用类型参数;不能使用其具体子类 以下简称List
java.util.Map,但:必须使用类型参数;不能使用其具体子类;key类型必须是String 以下简称Map
Enum
byte[]
正确的写法为:
public class Req {
private String s = "ss";
private int i;
private double d;
private Long l;
private long l1;
private boolean b;
private List<String> stringList;
private List<Person> personList;
private Map<String,Person> map;
private byte[] bytes;
private EnumType type;
}
public class Person {
private String name;
private int age;
}