OpenAPI 规范和工具的限制
通过基于 OpenAPI 的客户机使用托管透明决策服务时,您可能遇到某些与 OpenAPI 规范和工具相关的限制。
症状
在某些特定用例中,由于某些 OpenAPI 引用工具中有不正确的行为,那么可能遇到问题。
- swagger-core Java™ 库(在产品中嵌入):V1.5.10
- Swagger Codegen 代码生成工具:V2.2.1
- Swagger Editor:V2.10.3
诊断问题
| 数据类型 | 限制 |
|---|---|
| short 类型 | OpenAPI 规范仅具有 int32 和 int64 来分别表示 integer、标准整数(int 和 java.lang.Integer)和长整数(long 和 java.lang.Long)以进行映射。 短整数(short 和 java.lang.Short)将映射到 int32 并被视为一般整数。 因此,当您在规则项目或决策服务中使用 short 或 java.lang.Short 时,从 HTDS 提供的 OpenAPI 定义文件生成的客户机或接口使您能够输入整数而不是短数字。因此,输入大于 short 最大值的数字将最终导致执行错误。 |
| password 数据类型注释 | 通过 @ApiModelProperty 注释定制 Java XOM 字段可能反映到 HTDS 生成的 OpenAPI 定义文件上。 尤其是您可使用 datatype 属性来指定或覆盖 OpenAPI 中 Java 对象的字段类型。但是,如果将 password 设置为数据类型,那么可能不会生成 OpenAPI 定义文件。将看到以下错误:
该问题可能是由于用于生产 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 类型 | 当 byte 或 java.lang.Byte 用作 XOM 字段或用作规则集参数时,它在 Swagger Codegen 工具生成的 Java 客户机中称为 byte[],这将在运行时导致规则集执行错误。
在该特定用例中,使用 Swagger Editor 时不会在发生此类问题,因为字节表示为字符串,HTDS REST 接受这些字节并将它们转换为实际字节。 |
| arrays | 使用 Swagger Codegen 工具生成 Java 客户机时,arrays 将变为 lists。 例如,类型为 String[] 的字段将变为 List<String>。 |