---
title: "EntityServiceメタデータ交換"
slug: "entityservice-metadata-exchange"
abstract: "エンティリークラスのプロパティを設定する方法を説明します。"
---
# EntityServiceメタデータ交換

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