EntityServiceメタデータ交換
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
サーバー上のEntityServiceへの呼び出しを管理するJavaScriptは、自分が扱うエンティティクラスのプロパティを知っている必要があります。JavaScriptレイヤーは、C#エンティティクラスの型とプロパティ上のバリデータが分かれば、クライアントサイドでエンティティに割り当てられたデータの検証を行うことができます。
EntityServiceハンドラはHTTP OPTIONSリクエストを聞くことでこのメタデータ交換を支援します。OPTIONSリクエストを見つけると、サービスが提供するHTTPアクションと、サービスが動作するエンティティタイプの詳細な記述を含むJSON形式のHTTP応答を返します。
EntityServiceのアクションエンドポイントに呼び出す前に、JavaScriptコードはサーバーからサービスのメタデータを受け取るために単一の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型
JavaScriptデータ型
ストリング
ストリング
ブール
ブール値
知力
番号
浮き上がる
番号
ダブル
番号
長い
番号
デートタイム
デートタイム
ガイド
ガイド
エヌック
番号
!noteguidはJavaScriptのデータ型ではありませんが、EntityService JavaScriptレイヤーはこれをアイデンティティタイプとして認識し、適切に扱います。
非プリミティブ型のサポート
エンティティ記述のメタデータは、以下の非プリミティブ型をサポートしています:
- 配列
- List< T はジェネリックコレクション>
- IEnumerable< T >
- クラスと構造体
エンティティはSitecore.Services.Core.Model.EntityIdentityから導かれる型の性質を含むことはできません。