EntityServiceメタデータ交換

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

このページの翻訳は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から導かれる型の性質を含むことはできません。

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