Skip to main content

 

拡張と連携

 

 

OutSystems

サポートされていないREST Enumのユースケース

RESTサービスを利用する際、Service Studioで「enum」(列挙型)要素をインポートすることができます。Service Studioでこれらの要素は静的エンティティとして表示され、「enum」の各値は静的エンティティレコードとして表示されます。

Service StudioでREST APIをインポートするとき、一部のパラメータ/プロパティが、REST APIを記述するSwaggerの仕様ファイルで定義された「enum」ではなく、Textデータ型に関連付けられる場合があります。

場合によっては、識別された制限が適用されないように、仕様ファイルを少し変更すると、OutSystemsでREST APIを効果的に利用できます。

現在サポートされていないユースケースのリストは以下のとおりです。

通常、「enums」がサポートされるのは、「schema」フィールド内で定義される場合や「$ref」を使用して参照される場合です。OutSystemsでは、その例外の場合は現在サポートされていません。

以下のシナリオでは、現在サポートされていない一部の機能/ユースケースに対処できるように、WSDLに対して必要な変更を行うための一般的な手順を説明しています。

ボディ以外で指定された入力パラメータ

入力パラメータの型は、Swaggerの仕様内の「type」フィールドに基づいて定義されます。ボディ以外では、以下にこれらのパラメータを含めることができます。

  • パス
  • クエリ
  • Header
  • URLエンコードされたフォーム

ボディを除くこれらすべてのユースケースでは、静的エンティティは作成されません。これは、静的エンティティが「schema」フィールド内で定義されたり「$ref」フィールドを使用して参照されたりするのではなく、インラインで定義されるためです。

例:

"parameters": [
    {
        "name": "RegionId",
        "in": "path",
        "type": "integer",
        "format": "int32",
        "enum": [
            56411,
            23221,
            11222,
            45596
        ],
        "required": true
    }
]
"parameters": [
    {
        "name": "RegionId",
        "in": "query",
        "type": "integer",
        "format": "int64",
        "enum": [
            56411,
            23221,
            11222,
            45596
        ],
        "required": false
    }
]
"parameters": [
    {
        "name": "RegionId",
        "in": "header",
        "type": "string",
        "enum": [
            "Weddell Sea",
            "Riiser-Larsen Ice Shelf",
            "Coats Land"
        ],
        "required": false
    }
]
"parameters": [
    {
        "name": "RegionId",
        "in": "formData",
        "type": "integer",
        "format": "int32",
        "enum": [
            56411,
            23221,
            11222,
            45596
        ],
        "required": false
    }
]

ユースケースの回避策

現在、こうしたサポートされていないユースケースに対処するために利用できる一般的な回避策はありません。

Integer型またはText型以外のEnumsまたはenumsの配列

入力パラメータ、出力パラメータ、ストラクチャアトリビュートの型は、「schema」フィールドで定義される型または「$ref」フィールドを使用して参照される型に基づきます。静的エンティティが作成され、パラメータの型として適切に参照されます。

しかし、OutSystemsプラットフォーム(許容される識別子の型はInteger、Long Integer、Textのみ)ではこの型(または配列の要素の型)を識別子として定義することができないため、そのことを示すエラーがService Studioに表示されます。

例:

"parameters": [
    {
        "name": "RegionId",
        "in": "body",
        "schema": {
            "$ref": "#/definitions/Region"
        }
    }
],

"definitions": {
    "Region": {
        "description": "",
        "type": "number",
        "enum": [
            56411.0,
            23221.0,
            11222.0,
            45596.0
        ]
    }
}
"responses": {
    "200": {
        "description": "Successful request",
        "schema": {
            "type": "string",
            "format": "date-time",
            "enum": [
                "2018-03-22T09:12:28Z",
                "2018-07-23T11:16:00Z",
                "2018-10-24T17:22:05Z"
            ]
        }
    }
}
"responses": {
    "200": {
        "description": "Successful request",
        "schema": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/Region"
            }
        }
    }
}

"definitions": {
    "Region": {
        "type": "string",
        "format": "date-time",
        "enum": [
            "2018-03-22T09:12:28Z",
            "2018-03-23T09:12:28Z",
            "2018-03-24T09:12:28Z"
        ]
    }
}

ユースケースの回避策

「enum」の型をTextに変更してみます。Text型は他のすべての型を受け入れることができます。ただし、OutSystemsプラットフォームではこれらの値がTextとして解釈されるため、これらの値を元の型に明示的に変換する必要がある場合があります。
一方、利用するREST APIは(入力パラメータで)これらが整数または数値であることを想定しています。このとき、「OnBeforeRequest」コールバックを使用してリクエストをカスタマイズする必要がある場合があります。また、リクエスト/レスポンスをカスタマイズするロジックを定義する際は、デフォルト値を考慮してください。

参照によって指定された入力パラメータ

「parameters」セクションで定義された入力パラメータや「$ref」フィールドを使用して参照された入力パラメータは、「type」フィールドで定義された型で作成されます。静的エンティティは作成されません。ボディで定義されている場合、Service Studioは例外をスローします。

例:

"parameters": [
    {
        "$ref": "#/parameters/RegionId"
    }
]

"parameters": {
    "RegionId": {
        "name": "RegionId",
        "in": "body",
        "schema": {
            "type": "integer",
            "format": "int32",
            "enum": [
                56411,
                23221,
                11222,
                45596
            ]
        }
    }
}
"parameters": [
    {
        "$ref": "#/parameters/RegionId"
    }
]

"parameters": {
    "RegionId": {
        "name": "RegionId",
        "in": "query",
        "type": "integer",
        "format": "int32",
        "enum": [
            56411,
            23221,
            11222,
            45596
        ]
    }
}

ユースケースの回避策

パラメータを参照する代わりに適切に定義します。

ヘッダーで指定された出力パラメータ

「headers」セクションで定義された出力パラメータは、「type」フィールドで定義された型で作成されます。静的エンティティは作成されません。

例:

"responses": {
    "200": {
        "description": "Successful request",
        "headers": {
            "RegionId": {
                "type": "integer",
                "format": "int64",
                "enum": [
                    56411,
                    23221,
                    11222,
                    45596
                ]
            }
        }
    }
}
"responses": {
    "200": {
        "$ref": "#/responses/DefaultSuccessResponse"
    }
}

"responses": {
    "DefaultSuccessResponse": {
        "description": "Successful request",
        "headers": {
            "RegionId": {
                "type": "integer",
                "format": "int32",
                "enum": [
                    56411,
                    23221,
                    11222,
                    45596
                ]
            }
        }
    }
}

ユースケースの回避策

現在、こうしたサポートされていないユースケースに対処するために利用できる一般的な回避策はありません。

  • Was this article helpful?