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

Cloud API のコンテキストでは、データモデルエンティティから対応要素リソースに情報をマップする方法を定義するマッパーが、マッピングファイルに含まれています。この情報は、GET で使用されるだけでなく、POST や PATCH の応答でも使用されます。


マッピングファイル

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

マッピングファイル構文の概要

1 つ以上の API リソースが列挙される mappers セクションが、マッピングファイルにあります。リソースごとに、以下の属性が指定されます。

  • リソースの構造を定義する schemaDefinition
    • これは、schema.json ファイル内で宣言されたスキーマを参照します。
  • このリソースに関するマッピング情報の root として機能するデータモデルエンティティ。
  • properties のリスト
    • 各プロパティに 1 つの path 属性が含まれています。これは、プロパティの値を生成するために使用される Gosu 式です。通常、root 属性で定義されたエンティティからの値をこの式で返します。
    • プロパティの特性によっては、追加の属性が存在する場合があります。

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

"Activity": {
  "schemaDefinition": "Activity",
  "root": "entity.Activity",
  "properties": {
    "closeDate": {
      "path": "Activity.CloseDate"
    },
    "description": {
      "path": "Activity.Description"
    },
    "mandatory": {
      "path": "Activity.Mandatory"
    },
    ...

次の点に注目します。

  • 名前が Activity であるスキーマでこのリソースは定義されます(このスキーマは、他の schema.json ファイルで定義されます)。
  • リソースマッピングのルートは entity.Activity です。
  • リソースのインスタンスごとに以下のようになります。
    • closeDate プロパティが Activity エンティティの CloseDate フィールドに設定されます。
    • description プロパティが Activity エンティティの Description フィールドに設定されます。
    • mandatory プロパティが Activity エンティティの Mandatory フィールドに設定されます。

マッピングファイルにおける変更

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

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

    "<resourceName>": {
      "schemaDefinition": "<schemaNameForResource>",
      "root": "entity.<customEntity>",
      "properties": {
        // TODO RestEndpointGenerator : Add mapper properties here
        "id": {
          "path": "<customEntity>.RestId"
        }
      }
    }
例えば、CustomEntity_Ext エンティティ用のエンドポイントを生成すると、以下が拡張マッピングファイルに追加されます。
    "CustomEntityExt": {
      "schemaDefinition": "CustomEntityExt",
      "root": "entity.CustomEntity_Ext",
      "properties": {
        // TODO RestEndpointGenerator : Add mapper properties here
        "id": {
          "path": "CustomEntity_Ext.RestId"
        }
      }
    }

REST エンドポイントジェネレータで提供する情報は唯一のプロパティに関する情報であることに注意してください。 それは id です。開発者は以下の作業を担当します。

  • カスタムエンティティで GET(および POST や PATCH の応答)が利用できる必要があるフィールドの決定。
  • これらのフィールドに関するマッパー情報の追加。

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

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

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

    "CustomEntityExt": {
      "schemaDefinition": "CustomEntityExt",
      "root": "entity.CustomEntity_Ext",
      "properties": {
        // TODO RestEndpointGenerator : Add mapper properties here
        "id": {
          "path": "CustomEntity_Ext.RestId"
        },
        "customDescription": {
          "path": "CustomEntity_Ext.CustomDescription"
        },
        "isActive": {
          "path": "CustomEntity_Ext.IsActive"
        }
      }
    }

また、ExpirationDate を GET(および POST や PATCH の応答)で使用禁止にする必要があることを開発者が決定します。このフィールドはスキーマから省略された可能性が高いです。したがって、マッパーからも省略されています。

プロパティパスのマッピング構文

スカラー

通常、データモデルエンティティのフィールドがスカラー値の場合は、path プロパティをデータモデルエンティティのフィールドに設定します。他のプロパティは必要ありません。次に例を示します。
    "description": {
      "path": "Activity.Description"
    },

複合データ型

複合データ型(TypekeyMonetaryAmountCurrencyAmountSpatialPoint など)のマッピングを定義する場合、path 属性と追加 mapper 属性の両方を含める必要があります。mapper 属性でマッパーを指定しますが、複合データ型がそのスキーマにマップされる方法をこのマッパーで定義します。下の表に、一般的な複合データ型の mapper 属性値を示します。
複合データ型 マッパー値
Typekey #/mappers/TypeKeyReference
MonetaryAmount #/mappers/MonetaryAmount
CurrencyAmount #/mappers/CurrencyAmount
SpatialPoint #/mappers/SpatialPoint
例えば、Activity データモデルエンティティの AssignmentStatus フィールドのマッピングは次のようになります。
    "assignmentStatus": {
      "path": "Activity.AssignmentStatus",
      "mapper": "#/mappers/TypeKeyReference"
    },