API での推奨値の管理
エクスペリエンスデータモデル(XDM)の任意の文字列フィールドについて、フィールドが取り込むことができる値を事前定義済みのセットに制限する enum を定義できます。 列挙フィールドにデータを取り込もうとすると、その値が設定で定義されている値と一致しない場合、取り込みは拒否されます。
列挙とは異なり、文字列フィールドに 推奨値 を追加しても、取り込むことができる値は制限されません。 代わりに、文字列フィールドを属性として含める場合、推奨値は、 セグメント化 UI で使用できる事前定義済みの値に影響を与えます。
このガイドでは、 スキーマレジストリ API を使用して推奨値を管理する方法について説明します。 Adobe Experience Platform ユーザーインターフェイスでこれを行う手順については、UI ガイドの列挙と推奨値を参照してください。
前提条件
このガイドは、XDM でのスキーマ構成の要素と、Schema Registry API を使用して XDM リソースを作成および編集する方法について理解していることを前提としています。 説明が必要な場合は、次のドキュメントを参照してください。
既存のフィールドを更新する場合は、 列挙と推奨値の進化ルールを確認することを強くお勧めします。 結合に参加するスキーマの推奨値を管理している場合は、 列挙と推奨値の結合ルールを参照してください。
構成
API では、enum フィールドの制約値は enum
配列で表され、meta:enum
オブジェクトはそれらの値にわかりやすい表示名を提供します。
"exampleStringField": {
"type": "string",
"enum": [
"value1",
"value2",
"value3"
],
"meta:enum": {
"value1": "Value 1",
"value2": "Value 2",
"value3": "Value 3"
},
"default": "value1"
}
列挙フィールドの場合、スキーマレジストリでは、enum
で指定された値を超えて meta:enum
を拡張することはできません。これらの制約の範囲外の文字列値を取り込もうとすると、検証に合格しないためです。
または、enum
配列を含まず、meta:enum
オブジェクトのみを使用して 推奨値 を示す文字列フィールドを定義することもできます。
"exampleStringField": {
"type": "string",
"meta:enum": {
"value1": "Value 1",
"value2": "Value 2",
"value3": "Value 3"
},
"default": "value1"
}
文字列には制約を定義する enum
配列がないので、meta:enum
プロパティを拡張して新しい値を含めることができます。
標準フィールドへの推奨値の追加 add-suggested-standard
標準の文字列フィールドの meta:enum
を拡張するには、特定のスキーマで問題となっているフィールドに わかりやすい名前記述子を作成します。
meta:enum
を拡張しても、同じ標準フィールドを使用する他のスキーマには影響しません。次のリクエストは、sourceSchema
で識別されるスキーマの標準 eventType
フィールド(XDM ExperienceEvent クラスによって提供)に推奨値を追加します。
curl -X POST \
https://platform.adobe.io/data/foundation/schemaregistry/tenant/descriptors \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-H 'Content-Type: application/json' \
-d '{
"@type": "xdm:alternateDisplayInfo",
"sourceSchema": "https://ns.adobe.com/{TENANT_ID}/schemas/fbc52b243d04b5d4f41eaa72a8ba58be",
"sourceProperty": "/eventType",
"title": {
"en_us": "Enum Event Type"
},
"description": {
"en_us": "Event type field with soft enum values"
},
"meta:enum": {
"eventA": {
"en_us": "Event Type A"
},
"eventB": {
"en_us": "Event Type B"
}
}
}'
記述子を適用した後、スキーマレジストリはスキーマを取得する際に次のように応答します(応答がスペースを節約するために切り捨てられます)。
{
"$id": "https://ns.adobe.com/{TENANT_ID}/schemas/fbc52b243d04b5d4f41eaa72a8ba58be",
"title": "Example Schema",
"properties": {
"eventType": {
"type":"string",
"title": "Enum Event Type",
"description": "Event type field with soft enum values.",
"meta:enum": {
"customEventA": "Custom Event Type A",
"customEventB": "Custom Event Type B"
}
}
}
}
meta:enum
に既に値が含まれている場合、記述子からの新しい値は既存のフィールドを上書きせず、代わりにに追加されます。code language-json |
---|
|
カスタムフィールドの推奨値の管理 suggested-custom
カスタムフィールドの meta:enum
を管理するには、PATCHリクエストを通じて、フィールドの親クラス、フィールドグループまたはデータタイプを更新できます。
meta:enum
を更新すると、そのフィールドを使用する他のすべてのスキーマに影響します。 変更がスキーマ間に反映されないようにする場合は、代わりに、新しいカスタムリソースを作成することを検討してください。次のリクエストは、カスタムデータタイプが提供する「ロイヤルティレベル」フィールドの meta:enum
を更新します。
curl -X PATCH \
https://platform.adobe.io/data/foundation/schemaregistry/tenant/datatypes/_{TENANT_ID}.datatypes.8779fd45d6e4eb074300023a439862bbba359b60d451627a \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-H 'Content-Type: application/json' \
-d '[
{
"op": "replace",
"path": "/loyaltyLevel/meta:enum",
"value": {
"ultra-platinum": "Ultra Platinum",
"platinum": "Platinum",
"gold": "Gold",
"silver": "Silver",
"bronze": "Bronze"
}
}
]'
変更を適用した後、スキーマレジストリはスキーマを取得する際に次のように応答します(応答がスペースを節約するために切り捨てられます)。
{
"$id": "https://ns.adobe.com/{TENANT_ID}/schemas/fbc52b243d04b5d4f41eaa72a8ba58be",
"title": "Example Schema",
"properties": {
"loyaltyLevel": {
"type":"string",
"title": "Loyalty Level",
"description": "The loyalty program tier that this customer qualifies for.",
"meta:enum": {
"ultra-platinum": "Ultra Platinum",
"platinum": "Platinum",
"gold": "Gold",
"silver": "Silver",
"bronze": "Bronze"
}
}
}
}
次の手順
このガイドでは、Schema Registry API の文字列フィールドの推奨値を管理する方法について説明しました。 様々なフィールドタイプの作成方法について詳しくは、API でのカスタムフィールドの定義に関するガイドを参照してください。