OpenAPI 仕様およびツールの制限事項

OpenAPI ベースのクライアントを通じてホスト化されたトランスペアレント意思決定サービス (HTDS) を使用しているときに、OpenAPI 仕様およびツールに関するいくつかの制限が生じる場合があります。

症状

いくつかの OpenAPI リファレンス・ツールでの誤った動作のために、いくつかの特定のユースケースで問題が発生する場合があります。

表 1 では、以下のツールで発生する可能性のある問題を説明しています。

  • swagger-core Java™ ライブラリー (製品に組み込まれています): V1.5.10
  • Swagger Codegen コード生成ツール: V2.2.1
  • Swagger Editor: V2.10.3

Operational Decision Manager は OpenAPI 3.0を使用します。 OpenAPI 2.0 から 3.0 にアップグレードする場合、セキュリティー定義はバージョンによって異なります。 定義を更新しないと、OpenAPI 3.0 でルール・セットを呼び出したときに認証エラーが発生する可能性があります。

表 2: OpenAPI 3.x データ型および制限 は、以下のツールで発生する可能性がある Java タイプの問題を示しています。

  • swagger-core Java™ ライブラリー (製品に組み込まれています): V2.1.4
  • swagger-codegen コード生成ツール: V3.0.21

問題の診断

ルール・セット・パラメーターの名前を Request または Responseにすることはできません。

表 1. データ型と制限事項
データ・タイプ 制約事項
short OpenAPI 仕様には、 integer用の int32 表記と int64 表記、およびマッピング用の標準整数 (intjava.lang.Integer) と long 数値 (long java.lang.Long) のみが含まれます。

short の数値 (short および java.lang.Short) は int32 にマップされ、正規の integer の数値として処理されます。

結果として、ルール・プロジェクトまたは意思決定サービスで short または java.lang.Short を使用する場合には、HTDS によって提供された OpenAPI 定義ファイルから生成されたクライアントまたはインターフェースでは、short の数値ではなく integer の数値を入力できます。 このため、short の最大値より大きい数値を入力すると、実行エラーで終了します。

password データ型の注釈 @ApiModelProperty アノテーションを使用して Java XOM フィールドをカスタマイズすると、HTDS によって生成される OpenAPI 定義ファイルに反映される場合があります。
特に、 datatype プロパティーを使用して、 OpenAPI内の Java オブジェクトのフィールドのタイプを指定またはオーバーライドすることができます。 ただし、password をデータ型として設定した場合、その OpenAPI 定義ファイルは生成されない場合があります。 次のエラーが表示されます。
認識されない型 (Unrecognized Type): [null]

この問題は、 OpenAPI 定義ファイルの生成に使用される swagger-core Java ライブラリーの動作が正しくないことが原因です。 password データ型の使用は避けてください。

次善策として、注釈のない (または、少なくとも password データ型のない) String フィールドを使用し、生成された 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 クライアントを生成すると、配列はリストになります。

例えば、型 String[] のフィールドは List<String> になります。

表 2. OpenAPI 3.x のデータ型と制限事項
データ・タイプ 制約事項
byte

byte が XOM フィールドまたはルール・セット・パラメーターとして使用されている場合、 swagger V3 corebytestring 型および byte形式の swagger StringSchemaに変換します。 バイトの rang 制限事項 ([-128, 127]) は満たされなくなります。

使用される値が制限事項の範囲外であれば、結果は間違いとなるはずです。

char

char が XOM フィールドまたはルール・セット・パラメーターとして使用される場合、 swagger V3 corecharstring型の swagger StringSchemaに変換します。 char の長さは満たされなくなります。

ストリング値の長さが 1 より大きい型を使用すると、実行時にエラーが発生します。

short

short が XOM フィールドまたはルール・セット・パラメーターとして使用されている場合、 swagger V3 coreshortinteger 型および int32形式の swagger IntegerSchemaに変換します。 int32rang[-2147483648, 2147483647] であるので、short [-32768, 32767]rang 制約事項は満たされなくなります。

使用される値が short rang の範囲外であれば、結果は間違いとなるはずです。