OpenAPI 规范和工具的限制

通过基于 OpenAPI 的客户机使用托管透明决策服务时,您可能遇到某些与 OpenAPI 规范和工具相关的限制。

症状

在某些特定用例中,由于某些 OpenAPI 引用工具中有不正确的行为,那么可能遇到问题。

注: 使用一个或多个以下工具时,可能遇到表 1 中描述的某些问题:
  • swagger-core Java™ 库(在产品中嵌入):V1.5.10
  • Swagger Codegen 代码生成工具:V2.2.1
  • Swagger Editor:V2.10.3

诊断问题

表 1. 数据类型和限制
数据类型 限制
short 类型 OpenAPI 规范仅具有 int32int64 来分别表示 integer、标准整数(intjava.lang.Integer)和长整数(longjava.lang.Long)以进行映射。

短整数(shortjava.lang.Short)将映射到 int32 并被视为一般整数。

因此,当您在规则项目或决策服务中使用 shortjava.lang.Short 时,从 HTDS 提供的 OpenAPI 定义文件生成的客户机或接口使您能够输入整数而不是短数字。因此,输入大于 short 最大值的数字将最终导致执行错误。

password 数据类型注释 通过 @ApiModelProperty 注释定制 Java XOM 字段可能反映到 HTDS 生成的 OpenAPI 定义文件上。
尤其是您可使用 datatype 属性来指定或覆盖 OpenAPI 中 Java 对象的字段类型。但是,如果将 password 设置为数据类型,那么可能不会生成 OpenAPI 定义文件。将看到以下错误:
类型无法识别:[null]

该问题可能是由于用于生产 OpenAPI 定义文件的 swagger-core Java 库中的不正确行为。避免使用 password 数据类型。

作为变通方法,可使用 String 字段而不使用注释(或者少不使用 password 数据类型),并修改生成的 OpenAPI 定义文件在对应的字段中指定 "format": "password"。它可用于 Swagger Editor(测试表单考虑到这一点,在输入字符时即隐藏字符)而且 Swagger Codegen 工具可正确地生成客户机属性(字段通过标准 String 类型表示)。

binary 数据类型注释 类似于 password 数据类型,Java XOM 中的 String 字段可通过使用 binary 作为数据类型属性的 @ApiModelProperty 注释来进行注释。

password 数据类型不同,该 binary 数据类型不会阻止 HTDS 正确地生成 OpenAPI 定义文件。

但是,如果使用 Swagger Codegen 工具来生成 Java 客户机,已注释的字段表示为 byte[] 字段,这将在运行时导致规则集执行错误。

在该特定用例中,使用 Swagger Editor 时不会在发生此类问题。

byte 类型 bytejava.lang.Byte 用作 XOM 字段或用作规则集参数时,它在 Swagger Codegen 工具生成的 Java 客户机中称为 byte[],这将在运行时导致规则集执行错误。

在该特定用例中,使用 Swagger Editor 时不会在发生此类问题,因为字节表示为字符串,HTDS REST 接受这些字节并将它们转换为实际字节。

arrays 使用 Swagger Codegen 工具生成 Java 客户机时,arrays 将变为 lists。

例如,类型为 String[] 的字段将变为 List<String>