生成エンドポイントのスキーマファイルのコンフィギュレーション

Cloud API のコンテキストでは、スキーマファイルは 1 つ以上のリソースの構造を定義します。この情報は、GET、POST、PATCH で使用されます。


スキーマファイル

以降のセクションでは、生成エンドポイント用スキーマファイルのコンフィギュレーションの概要を示します。スキーマのコンフィギュレーション方法の完全な説明については、スキーマのコンフィギュレーションを参照してください。

スキーマファイル構文の概要

1 つ以上のスキーマが列挙される definitions セクションが、スキーマファイルにあります。各スキーマは、API リソースを構築するために使用されます。スキーマごとに、以下の属性が指定されます。

  • titledescription:API 定義ドキュメントで使用されます。
  • リソースの type:通常は object に設定されます。
  • properties のリスト。各プロパティに以下が含まれています。
    • titledescription:API 定義ドキュメントで使用されます。
    • type:プロパティの JSON データ型を定義します(スカラー値の場合)。
    • ref:プロパティの URI 参照を定義します(タイプキーなどの複合値の場合)。
    • プロパティの業務機能に必要なオプション属性。

例えば、ベースコンフィギュレーションの Activity リソースでスキーマの部分を以下に示します。

"Activity": {
  "title": "Activity",
  "description": "An `Activity` is an assignable item that represents a task to be done, a decision to be made, or information to be aware of",
  "type": "object",
  "properties": {
    "activityPattern": {
      "title": "Activity pattern",
      "description": "The code of the `ActivityPattern` used to create this activity and set its initial values",
      "type": "string"
      ...
      }
    },

スキーマファイルにおける変更

ベースコンフィギュレーションには、API 固有の拡張スキーマファイルのセットが含まれています。これらのファイルの目的は、特定の API 用のカスタムリソースに関するスキーマ情報を定義することです。「<API>_ext-1.0.schema.json」のパターンを使用してこれらのファイルに名前が付けられます。<API> は API の内部名です。例えば、common_ext-1.0.schema.json ファイルを使用して、Common API でカスタムリソースに関するスキーマ情報を定義します。拡張スキーマファイルには、Studio で integration -> schemas -> ext -> <API>.v1 ノードを介してアクセスできます

カスタムエンティティ用のエンドポイントを生成すると、REST エンドポイントジェネレータが以下のコードを関連の拡張スキーマファイルに追加します。

    "<resourceName>": {
      "title": "<custom entity name>",
      "description": "<custom entity name>",
      "type": "object",
      "properties": {
        // TODO RestEndpointGenerator : Add schema properties here
        "id": {
          "title": "ID",
          "description": "The unique identifier of this element",
          "type": "string",
          "readOnly": true
        }
      }
    }

例えば、CustomEntity_Ext エンティティ用のエンドポイントを生成すると、以下が拡張スキーマ ファイルに追加されます。

    "CustomEntityExt": {
      "title": "Custom entity ext",
      "description": "Custom entity ext",
      "type": "object",
      "properties": {
        // TODO RestEndpointGenerator : Add schema properties here
        "id": {
          "title": "ID",
          "description": "The unique identifier of this element",
          "type": "string",
          "readOnly": true
        }
      }
    }

REST エンドポイントジェネレータでは、唯一のプロパティ(id)に関する properties 情報だけを提供します。開発者は以下の作業を担当します。

  • カスタムエンティティでエンドポイントが利用できる必要があるフィールドの決定。
  • これらのフィールドに関するマッパー情報の追加。

例えば、CustomEntity_Ext エンティティに次の 3 つのフィールドがあるとします。

  • CustomDescription(文字列型)
  • IsActive(Boolean 型)
  • ExpirationDate(日付時刻型)

CustomDescriptionIsActive を GET、POST、または PATCH で使用できる必要があることを開発者が決定します。以下の太字で示されているコードを開発者は追加する必要があります。

    "CustomEntityExt": {
      "title": "Custom entity ext",
      "description": "Custom entity ext",
      "type": "object",
      "properties": {
        // TODO RestEndpointGenerator : Add schema properties here
        "id": {
          "title": "ID",
          "description": "The unique identifier of this element",
          "type": "string",
          "readOnly": true
        },
        "customDescription": {
          "title": "CustomDescription",
          "description": "The description for the CustomEntity",
          "type": "string"
        },
        "id": {
          "title": "isActive",
          "description": "Whether the CustomEntity is active",
          "type": "boolean"
        }
      }
    }

また、ExpirationDate を GET と POST/PATCH 応答で使用禁止にする必要があることを開発者が決定します。そのため、このフィールドがスキーマから省略されます。

プロパティ型の構文

各プロパティのデータ型は、type 属性または $ref 属性を使用して指定します。

スカラー

データモデルエンティティフィールドがスカラーの場合、type 属性を下表のいずれかの JSON スキーマ型に設定します。

データモデルのデータ型 対応する JSON 型 追加の必須プロパティ
bit boolean
dateonly string date に設定された追加の format プロパティ
datetime string date-time に設定された追加の format プロパティ
decimal number
integer integer
longint integer
longtext string
mediumtext string
money number
percentage number
shorttext string
text string
varchar string

例えば、CustomEntityExt リソースには以下のスカラープロパティがあり得ます。

  "definitions": {
    "CustomEntityExt": {
      "title": "Custom entity ext",
      "description": "Custom entity ext",
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "isActive": {
          "type": "boolean"
        },
        "customDescription": {
          "type": "string"
        },
        "expirationDate": {
          "type": "string",
          "format": "date-time"
        }
      }
    }
  }

複合データ型

InsuranceSuite には、複数の値を 1 つの単位として保存するデータ型がいくつかあります。これには以下が含まれます。

  • Typekey(コードと名前)
  • MonetaryAmount と CurrencyAmount(通貨と金額)
  • SpatialPoint(経度座標と緯度座標)

例えば、assignmentStatus プロパティのデータ型は Typekey です。そのため、アクティビティのアサインステータスの応答ペイロードには 2 つのサブフィールドがあります。

    "assignmentStatus": {
      "code": "pendingassignment",
      "name": "Pending Assignment"
    },

複合データ型のスキーマプロパティを定義するときは、type プロパティを含めないでください。その代わりに、既存のデータ型定義を指定する $ref 属性を指定します。下表に、一般的な複合データ型の $ref 値を示します。

複合データ型 $ref 値 追加の必須プロパティ
Typekey #/definitions/TypeKeyReference 関連タイプリストを識別する typelists 子属性を持つ x-gw-extensions 属性。
MonetaryAmount #/definitions/MonetaryAmount
CurrencyAmount #/definitions/CurrencyAmount
SpatialPoint #/definitions/SpatialPoint

例えば、Activity データモデルエンティティの AssignmentStatus フィールドのマッピングは次のようになります。

"assignmentStatus": {
  ... 
  "$ref": "#/definitions/TypeKeyReference",
  "x-gw-extensions": {
    "typelist": "AssignmentStatus"
  }

Contact データモデルエンティティの SpatialPoint フィールド(空間ポイント)のマッピングは次のようになります。

"spatialPoint": {
  ... 
  "$ref": "#/definitions/SpatialPoint"
}

追加プロパティ

スキーマファイルでは、type 属性または $ref 属性のいずれかを使用して各プロパティのデータ型を指定する必要があります。また、オプション属性を追加することもできます。一部の属性は、プロパティの直接の子です。それ以外の属性は、x-gw-extensions オブジェクト内で宣言する必要があります。

一部の属性にはデフォルト値があります。以下の表は、デフォルト値を示します。

プロパティの直接の子となる追加プロパティ

属性 説明
readOnly フィールドが読み取り専用かどうかを識別する Boolean(デフォルトは false です)。 "readOnly": true
x-gw-nullable フィールドを明示的に null に設定できるかどうかを識別する Boolean(デフォルトは true です)。詳細については、後述の「フィールドに必須のマークを設定」を参照してください。
"x-gw-nullable": false
x-gw-sinceVersion プロパティを含む API の最初のバージョンを識別する文字列
"x-gw-sinceVersion": "1.​1.​0"
例えば、CustomEntity_Ext エンティティに ExpirationDate フィールドがあるとします。対応するリソースプロパティは読み取り専用で、バージョン 1.1.0 で追加されています。プロパティ宣言は次のようになります。
  "definitions": {
    "CustomEntityExt": {
      ...
      "properties": {
        ...
        },
        "expirationDate": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "x-gw-sinceVersion": "1.1.0"
        }
        ...

x-gw-extension オブジェクトで宣言される追加プロパティ

属性 説明
createOnly オブジェクトが作成されたときにのみフィールドを指定可能かどうかを識別する Boolean(デフォルトは false です)。 "createOnly": true
filterable このフィールドに対して filter クエリパラメータを使用できるかどうかを識別する Boolean。つまり、このプロパティを使用してコレクションをフィルタできます(デフォルトは false です)。 "filterable": true
requiredForCreate オブジェクトが作成されたときにフィールドを指定する必要があるかどうかを識別する Boolean(デフォルトは false です)。詳細については、後述の「フィールドに必須のマークを設定」を参照してください。 "requiredForCreate": true
sortable このフィールドに対して sort クエリパラメータを使用できるかどうかを識別する Boolean。つまり、このプロパティを使用してコレクションを並び替えることができます(デフォルトは false です)。 "sortable": true

例えば、CustomEntity_Ext エンティティに SeverityType フィールドがあり、このフィールドは SeverityType タイプリストの値に設定されたタイプキーであるとします。対応するリソースプロパティは作成時に指定する必要があり、作成後には変更できません。このリソースプロパティはフィルタ可能かつ並べ替え可能です。プロパティ宣言は次のようになります。

  "definitions": {
    "CustomEntityExt": {
      ...
      "properties": {
        ...
        },
        "severityType": {
          "$ref": "#/definitions/TypeKeyReference",
          "x-gw-extensions": {
            "typelist": "SeverityType",
            "createOnly": true,
            "requiredForCreate": true,
            "filterable": true,
            "sortable": true
          }
        }
        ...

データベースでフィールドに必須のマークを設定

データモデルでは、一部のエンティティフィールドが必須です。フィールドの値を指定せずにエンティティのインスタンスを作成できません。例えば、各アクティビティには完了日を指定する必要があるというビジネスルールが、保険会社にあるとします。これを強制するために、Activity エンティティの EndDate フィールドは必須です。

スキーマでは、リソースフィールドに必須のマークを付けることができます。これを行うには、次のプロパティを設定する必要があります。

  • "requiredForCreate": true
    • この x-gw-extensions 属性は、フィールドを POST ペイロードに含める必要があることを示します。
  • "x-gw-nullable": false
    • フィールドが指定された場合、その値を null に設定できないことをこの属性は示します。

"requiredForCreate": true」の式自体は、フィールドを POST で指定する必要があることを指示するだけです。呼び出し元がフィールドを含めてフィールド値を null に設定しないようにする手段はありません。

"x-gw-nullable": false」の式自体は、フィールドが指定された場合、フィールド値を null に設定できないことを指示するだけです。

2 つの式を組み合わせることで指示する処理は、フィールドを POST で指定して、null でない値に設定し、その後でフィールドが指定された場合に null でない値に設定する必要があることです。これは、データエンティティフィールドを必須に設定することと等価です。

例えば、CustomEntity_Ext エンティティに文字列の CustomDescription フィールドがあるとします。このフィールドは必須です。プロパティ宣言は次のようになります。
  "definitions": {
    "CustomEntityExt": {
      ...
      "properties": {
        ...
        },
        "customDescription": {
          "type": "string",
          "x-gw-nullable": false,
          "x-gw-extensions": {
            "requiredForCreate": true
          }
        }
        ...