1. Sitecore.Services.クライアント

EntityServiceメタデータ交換

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

サーバー上のEntityServiceの呼び出しを管理するJavaScriptは、処理するエンティティ クラスのプロパティについて認識する必要があります。JavaScriptレイヤーは、C# エンティティ クラスの型とそのプロパティに存在するバリデーターを認識している場合、エンティティに割り当てられたデータのクライアント側検証を実行できます。

EntityServiceハンドラは、HTTP OPTIONS要求をリッスンすることで、このメタデータ交換を支援します。OPTIONSリクエストが見つかると、サービスが提供するHTTPアクションと、サービスが動作するエンティティタイプの詳細な説明を説明するJSON形式のHTTPレスポンスで応答します。

EntityServiceのアクション エンドポイントを呼び出す前に、JavaScriptコードは1回のHTTP OPTIONS呼び出しを行って、サーバーからサービスのメタデータを受け取ります。

メタデータの例を次に示します。

/**
 * Example of the metadata which indicates how to call.
 */
var MetdataAboutHowToCall = {
  "actions": {
    "GET": [
        {
          "FetchEntities": {
            "returnType": "Blog.Model.Blog[]",
            "properties": {}
          }
        },
        {
          "FetchEntity": {
            "returnType": "Blog.Model.Blog",
            "properties":{
              "key":"id",
              "datatype":"Guid"
            }
          }
        }
      ],
      "POST": {
        "CreateEntity": {
          "returnType": "void",
          "properties": {
            "key": "entity",
            "datatype": "Blog.Model.Blog"
          }
        }
      },
      "PUT": {
        "UpdateEntity": {
          "returnType": "void",
          "properties": {
            "key": "entity",
            "datatype": "Blog.Model.Blog"
          }
        }
      },
      "DELETE": {
        "Delete": {
          "returnType": "void",
          "properties": {
            "key": "entity",
            "datatype": "Blog.Model.Blog"
          }
        }
      }
    }
  };

メタデータには、サーバーに送信できるエンティティに関する情報も含まれています。

var entityMetadata = {
    "entity": {
      "key": "Id",
      "properties": [
        {
          "key": "Name",
          "datatype": "string",
          "validators": []
        },
        {
          "key": "Authors",
          "datatype": [
            [
              {
                "key": "Name",
                "datatype": "string",
                "validators": []
              },
              {
                "key": "Address",
                "datatype": [
                  {
                    "key": "Postcode",
                    "datatype": "string",
                    "validators": []
                  }
                ],
                "validators":[]
              }
            ]
          ],
          "validators":[]
        },
        {
          "key":"Created",
          "datatype":"datetime",
          "validators":[]
        },
        {
          "key":"State",
          "datatype":"number",
          "validators":[]
        },
        {
          "key":"Id",
          "datatype":"string",
          "validators":[]
        },
        {
          "key":"Url",
          "datatype":"string",
          "validators":[]
        }
      ]
    }
  };

EntityServiceJSは、サーバーが送信するメタデータに基づいてデータをサニタイズします。

アクションエンドポイント

OPTIONSリクエストによって返されるメタデータには、JSONレスポンスにactionsオブジェクトが含まれます。このオブジェクトには、エンドポイントが公開する各HTTP動詞のメソッドと関連するメソッド シグネチャに関する詳細があります。

例えば:

"actions": {
    "GET": [
        {
            "FetchEntities": {
                "returnType": "entityType[]",
                "properties": {}
            }
        },
        {
            "FetchEntity": {
                "returnType": entityType",
                "properties": {
                    "key": "id",
                    "datatype": "Guid"
                }
            }
        }
    ],
    "POST": {
        "CreateEntity": {
            "returnType": "void",
            "properties": {
                "key": "entity",
                "datatype": "entityType"
            }
        }
    },
    "PUT": {
        "UpdateEntity": {
            "returnType": "void",
            "properties": {
                "key": "entity",
                "datatype": "entityType"
            }
        }
    },
    "DELETE": {
        "Delete": {
            "returnType": "void",
            "properties": {
                "key": "entity",
                "datatype": "entityType"
            }
        }
    }
}

ここで、entityTypeはEntityServiceのC# 型名です。

エンティティのメタデータ

OPTIONSリクエストは、JSONレスポンスにエンティティオブジェクトを含むメタデータを返します。このエンティティ オブジェクトは、EntityServiceが処理するマップされたC# エンティティ型の詳細を提供します。

例えば:

"entity": {
    "key": "Id",
    "properties": [
        {
            "key": "Name",
            "datatype": "string",
            "validators": []
        },
        {
            "key": "Authors",
            "datatype": [
                [
                    {
                        "key": "Name",
                        "datatype": "string",
                        "validators": [
                            {
                                "validatorName": "required",
                                "errorMessage": "Value is required"
                            },
                            {
                                "validatorName": "string",
                                "errorMessage": "Must be less than 50 characters in length",
                                "param": [
                                    0,
                                    50
                                ]
                            }
                        ]
                    },
                    {
                        "key": "Address",
                        "datatype": [
                            {
                                "key": "Postcode",
                                "datatype": "string",
                                "validators": []
                            }
                        ],
                        "validators": []
                    }
                ]
            ],
            "validators": []
        },
        {
            "key": "Id",
            "datatype": "string",
            "validators": []
        },
        {
            "key": "Url",
            "datatype": "string",
            "validators": []
        }
    ]
}
メモ

EntityServiceが処理するすべてのC# エンティティ型は、Sitecore.Services.Core.Model.EntityIdentity.

.NETからJavascriptへの型マッピング

Sitecore.Services.Client .NET型をJavaScriptデータ型にマップします。以下は、単純型のマッピング変換です:

.NET type

JavaScript data type

ブール値

ブーリアン

整数

浮く

長い

日時

日時

グイド

GUIDの

列挙型

手記

guidはJavaScriptデータ型ではありませんが、EntityService JavaScriptレイヤーはそれをID型として認識し、それに応じて扱います。

非プリミティブ型のサポート

エンティティ記述のメタデータは、次の非プリミティブ型をサポートしています。

  • 配列

  • List< T > Genericコレクション

  • IEnumerable< T >

  • クラスと構造体

エンティティには、Sitecore.Services.Core.Model.EntityIdentityから派生した型のプロパティを含めることはできません。

この記事を改善するための提案がある場合は、 お知らせください!