---
title: "リファレンスデータクライアントAPI"
slug: "reference-data-client-api"
abstract: "参照データクライアントAPIの概要と例。"
---
# リファレンスデータクライアントAPI

参照データクライアントAPI HTTPSを介して参照データサービスにアクセスします。これはReferenceDataHttpClientクラスで表現され、IReferenceDataClientインターフェースを実装します。

> !注各メソッドには同期版と非同期版の両方が利用可能です。例えば、EnsureDefinitionType() とEnsureDefinitionTypeAsync()。

すべての例は基本的なDefinition<string,string> 定義型を使っていますが、[カスタム型](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/create-custom-reference-data-types.html "Create custom reference data types")を作成することも可能です。

## SitecoreのコンテキストでReference Data Client APIを取得する

以下の例は、Sitecoreの文脈で参照データクライアントAPIの読み取り専用および読み書きインスタンスを取得する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
namespace Documentation
{
 public class RefDataClients
 {
 public async void AsyncExample()
 {
 // Read-write client
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 // Read-only client
 var readOnlyClient = ServiceLocator.ServiceProvider.GetService(typeof(IReadOnlyReferenceDataClient)) as IReadOnlyReferenceDataClient;
 }
 }
}

> !注Sitecoreの文脈では、設定はサービス実装かHTTPクライアント実装かを制御します。

## Reference Data Client APIをSitecore以外のコンテキストで入手してください

以下の例は、非Sitecore文脈でReferenceDataHttpClientを構築する方法を示しています。

using System;
using Microsoft.Extensions.Logging;
using Sitecore.Xdb.Common.Web;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core.Converter;

namespace TestConsoleApp
{
 public class RefDataHttpClientNonSitecore
 {
 public async void AsyncExample()
 {
 var url = "https://refdata/";

 var converter = new DefinitionEnvelopeJsonConverter();

 // Valid certificate thumbprints must be passed in
 var options = CertificateHttpClientHandlerModifierOptions.Parse(
"StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=BC6DBAC6D7E7796E5816DBA268FE2B7036F0F8D9");

 // Optional timeout modifier
 IHttpClientHandlerModifier handlers = { new CertificateHttpClientHandlerModifier(options) };

 var logger = new Logger<ReferenceDataHttpClient>(new LoggerFactory());

 var client = new ReferenceDataHttpClient(
 converter,
 new Uri(url),
 handlers,
 logger
 );
 }
 }
 }

## 定義を取得

以下の例は定義の取得方法を示しています。文化を指定しない場合、利用可能なすべての文化が返されます。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
 public class RefDataGetDefinition
 {
 public async void AsyncExample()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
 var criteria = new DefinitionCriteria("voyager", definitionType);

 var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

 var definitionData = definition.CultureDatanew CultureInfo("en-us"); // Get language from e.g. Sitecore.Context.CurrentLanguage.CultureInfo
 }
 }
}

### 文化特異的な定義を取得する

以下の例は、文化特異的定義の取得方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
 public class RefDataGetDefinitionCulture
 {
 public async void AsyncExample()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 // Retrieve Latest Active Definition with Danish Culture Only
 var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
 var criteria = new DefinitionCriteria("voyager", definitionType)
 {
 Culture = new CultureInfo("da") // Get language from e.g. Sitecore.Context.CurrentLanguage.CultureInfo
 };

 var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

 // Get Danish culture
 var data = definition.CultureDatanew CultureInfo("da"); // Get language from e.g.Sitecore.Context.CurrentLanguage.CultureInfo
 }
 }
}

### 検索培養不変定義

以下の例は、文化不変定義の取得方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

public class RefDataGetDefinitionCultureInvariant
{
 public async void AsyncExample()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 // Retrieve Latest Active Definition Culture Invariant
 var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
 var criteria = new DefinitionCriteria("voyager", definitionType)
 {
 Culture = CultureInfo.InvariantCulture
 };

 var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

 var data = definition.CultureDataCultureInfo.InvariantCulture;
 }
}

文化不変データは、データに文化があるが、その文化がデータのソースによって明示的に定義されていない場合に使用されます。例えば、外部の提供者が英語で都市名のリストを提供しても、データの文化を明示的に指定しない場合もあります。そのような場合、データは文化不変として保存されるべきです。

## 定義を保存する

以下の例は、さまざまな文化で新しい定義を作り保存する方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
 public class RefDataSaveDefinition
 {
 public async void Example()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 var definitionType = await client.EnsureDefinitionTypeAsync("country");

 var definitionKey = new DefinitionKey("se", definitionType, 1);
 var definition = new Definition<string, string>(definitionKey)
 {
 IsActive = true,
 CommonData = "the common data",
 CultureData = {
 { new CultureInfo("en"), "Sweden" }
 }
 };

 // aDd another definition culture
 definition.CultureDatanew CultureInfo("se") = "Sverige";

 // Culture invariant data (has culture, but culture is unknown)
 definition.CultureDataCultureInfo.InvariantCulture = "Swedenland";

 await client.SaveAsync(definition);
 }
 }
}
## 複数の定義を保存

以下の例は、複数の定義を保存する方法を示しています:

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;
using Sitecore.Xdb.ReferenceData.Core.Collections;

namespace Documentation
{
 public class RefDataSaveDefinition
 {
 public async void Example()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 var definitionType = await client.EnsureDefinitionTypeAsync("country");

 var definitionKey = new DefinitionKey("se", definitionType, 1);
 var definition = new Definition<string, string>(definitionKey)
 {
 IsActive = true
 };

 definition.CultureDatanew CultureInfo("en") = "Sweden";
 definition.CultureDatanew CultureInfo("se") = "Sverige";

 var definitionKey2 = new DefinitionKey("de", definitionType, 1);
 var definition2 = new Definition<string, string>(definitionKey)
 {
 IsActive = true
 };

 definition.CultureDatanew CultureInfo("en") = "Germany";
 definition.CultureDatanew CultureInfo("se") = "Tyskland";

 var definitions = new DefinitionCollection<string, string>
 {
 definition,
 definition2
 };

 await client.SaveAsync(definitions);
 }
 }
}
## 定義を有効化する

定義を起動するには、その定義のIsActiveプロパティをtrueに設定し、定義を保存します。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Client;
using Sitecore.Xdb.ReferenceData.Core;
using System.Globalization;

namespace Documentation
{
 public class RefDataActivateDefinition
 {
 public async void AsyncExample()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");
 var criteria = new DefinitionCriteria("voyager", definitionType);

 var definition = await client.GetDefinitionAsync<string, string>(criteria, false);

 definition.IsActive = true;

 await client.SaveAsync(definition);
 }
 }
}
## すべての定義を特定のタイプで取得してください

以下の例は、すべての定義を特定の型で取得し、結果をページ付けする方法を示しています。

using Sitecore.DependencyInjection;
using Sitecore.Xdb.ReferenceData.Core;
namespace Documentation
{
 public class RefDataActivateGetByType
 {
 public async void AsyncExample()
 {
 var client = ServiceLocator.ServiceProvider.GetService(typeof(IReferenceDataClient)) as IReferenceDataClient;

 var definitionType = await client.EnsureDefinitionTypeAsync("starfleet ships");

 // Gets the first 10 active definitions
 var definitions = await client.GetDefinitionsByTypeAsync<string, string>(definitionType, true, 1, 10);

 var pageOneDefinitions = definitions.Definitions;
 var currentPage = definitions.PageNumber;
 var currentPageSize = definitions.PageSize;
 var totalDefinitions = definitions.Total; // Total number of definitions with type 'starfleet ships'
 }
 }
}