当サイトを最適な状態で閲覧していただくにはブラウザのJavaScriptを有効にしてご利用下さい。
JavaScriptを無効のままご覧いただいた場合には一部機能がご利用頂けない場合や正しい情報を取得できない場合がございます。
承知しました
本サイトではWebサイトのエクスペリエンスを向上させるために、Cookieを使用しています。Cookieはブラウザの設定から無効にできます。本サイトで使用するCookieについては、プライバシーポリシーをご確認ください。

Blog

ブログ

開発者向け

新しいKenticoクラウドコンテンツ管理APIの使用

By Bryan Soltis  

ヘッドレスCMSアプローチがますます一般的になるにつれて、実装はますます複雑になります。プロジェクトが新しいとき、物事はとても素晴らしいです!クラウドに移行している既存のアプリケーションを扱う場合、状況は少し難しくなります。幸いなことに、Kentico Cloudには、役立つ新しいコンテンツ管理APIがあります。

過去2年間で、KenticoCloudに大量の機能を追加しました。 APIからSDKに至るまで、開発リソースの蓄積はほぼ毎日増えています。最新の追加の1つは、私たちが最も要求しているものの1つです。コンテンツ管理APIです。

この新機能により、Kentico CloudヘッドレスCMSにデータを直接書き込むことができ、移行プロジェクトがはるかに簡単になります。この記事では、この新機能を活用してKenticoEMSコンテンツをKenticoCloudに移植する方法を紹介します。

コンテンツ管理APIの概要

詳細に入る前に、最新のAPI追加の概要を簡単に説明したいと思います。コンテンツ管理APIは、KenticoCloudに直接データを書き込むように設計されています。これは、標準のREST API呼び出しを使用してコンテンツの移行をスクリプト化できることを意味し、アプリケーションをクラウドに移植するタスクを簡素化します。

私たちはまだその機能を構築していますが、今日のプロジェクトで利用できる機能はたくさんあります。

  • KenticoCloudからデータを読み取る
  • コンテンツアイテムを作成する
  • コンテンツアイテムを更新する
  • アセットをアップロードする

あなたはおそらくKenticoEMS開発者なので、既存のコンテンツをKenticoCloudに取り込むための簡単なモジュールを構築する方法を紹介したいと思います。

My KenticoCloudプロジェクトを準備する

コンテンツをインポートする最初のステップは、KenticoCloudでコンテンツモデルを作成することです。データはすでにKenticoEMSに(私の場合はカスタムテーブルとして)存在するため、Kenticoクラウドコンテンツモデルの作成は、いくつかのフィールドを追加するだけで済みました。わかりやすくするために、EMSサイトと同じ名前をフィールドに付けました。

Kentico Kontent


次に、コード内で使用する新しいコンテンツ管理APIキーを生成しました。これらのキーは永続的ではなく、30日後に期限切れになることに注意することが重要です。 Content Management APIは、データのリアルタイム同期を目的としたものではなく、アドホックな一括挿入アクションを目的としています。インポート機能を作成するときは、有効期限が切れた場合に新しいキーを生成する必要がある可能性があるため、これを必ず考慮してください。

Kentico Kontent

カスタムモジュールを作成する

Kentico Cloudプロジェクトの準備ができたので、新しいモジュールを追加する準備ができました。 Kentico EMSで、新しいCMSPageページを作成し、それにいくつかの基本的なコントロールを追加しました。 KenticoクラウドプロジェクトIDとAPIキーのフィールドを追加しました。管理が簡単な場合は、これらをモジュール設定にすることもできます。

Kentico Kontent


また、エクスポート用のコンテンツを作成してシリアル化するのに役立ついくつかの簡単なクラスを追加しました。 Elementクラスを使用してカスタムテーブルレコードを保持することに注意してください。これは、REST APIに投稿されたときにデータが適切にシリアル化されるように、必要な特定の構造を作成するためです。

 #region Classes public class Exoplanet { public string Name { get; set; } public Type Type { get; set; } public List sitemap_locations { get; set; } public Element elements { get; set; } } public class Type { public string codename { get; set; } } public class Element { public string planetname { get; set; } public string starname { get; set; } public int yeardiscovered { get; set; } [JsonIgnore] public string planetimage { get; set; } }#endregion

コンテンツ管理APIコード

次に、カスタム機能を追加しました。まず、カスタムテーブルAPIを使用してデータを抽出しました。コンテンツの一部である場合は、ページやその他のデータをエクスポートすることもできます。

 List lstExoplanets = new List(); // Prepares the code name (class name) of the custom table string customTableClassName = 'custom.Exoplanets'; // Gets the custom table DataClassInfo customTable = DataClassInfoProvider.GetDataClassInfo(customTableClassName); if (customTable != null) { // Gets all data records from the custom table var customTableData = CustomTableItemProvider.GetItems(customTableClassName); // Loops through individual custom table records foreach (CustomTableItem item in customTableData) { //TODO: Finish planet image integration //string pattern = @'[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}'; //string input = ValidationHelper.GetString(item.GetValue('PlanetImage'), ''); //var guid = Regex.Match(input, pattern, RegexOptions.IgnoreCase).Value; // Add a new Element object to the list lstExoplanets.Add(new Element { planetname = ValidationHelper.GetString(item.GetValue('PlanetName'), ''), starname = ValidationHelper.GetString(item.GetValue('StarName'), ''), yeardiscovered = ValidationHelper.GetInteger(item.GetValue('YearDiscovered'), 1900) }); } }


カスタムテーブルのレコードごとに、詳細を保持する新しいElementオブジェクトを作成しました。それらをList リストに追加しました。

KenticoCloudへの投稿

次に、List リストをループしました KenticoCloudに投稿するデータを準備しました。このプロセスの最初のステップは、投稿用の新しいHttpClientクライアントを作成することでした。

 // Create a client to connect to Kentico Cloud var client = new HttpClient { BaseAddress = new Uri('https://manage.kenticocloud.com/projects/' + txtProjectID.Text + '/') }; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue('application/json')); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue('Bearer', txtAPIKey.Text);


次に、すべてのコンテンツアイテムデータを保持する新しいExoplanetオブジェクトを作成しました。

 Exoplanet planet = new Exoplanet(); planet.Name = element.planetname; planet.Type = new Type { codename = 'exoplanet' }; planet.sitemap_locations = new List(); planet.elements = element;


ElementデータをExoplanetのelementsプロパティに割り当てることに注意してください。これは、 Exoplanetオブジェクトがシリアル化されるときに、要素のプロパティデータが、コンテンツ管理APIが期待するとおりに正確に構造化されるためです。

クライアントとデータが作成されたので、コンテンツをKenticoCloudに投稿する準備ができました。これには、挿入の2段階のプロセスが含まれていました。

まず、新しいオブジェクトを作成するためにAPIに投稿しました。 PostAsJsonAsync関数を使用して、シリアル化されたデータのPOSTを実行しました。このアクションにより、KenticoCloud内に新しいコンテンツアイテムが作成されます。

 // Create the item within the Kentico Cloud project HttpResponseMessage response = await client.PostAsJsonAsync('items', planet); response.EnsureSuccessStatusCode();

結果から新しいコンテンツアイテムIDを取得しました。

 // Parse the response JObject jobj = JObject.Parse(response.Content.ReadAsStringAsync().Result);

オブジェクトを作成したら、 PUTリクエストを実行して、新しいオブジェクトを要素やその他の詳細で更新しました。

 // Update the new item with the planet details HttpResponseMessage response2 = await client.PutAsJsonAsync('items/' + (string)jobj['id'].Value() + '/variants/codename/default', planet); response2.EnsureSuccessStatusCode(); sb.Append(element.planetname + ' exported!
');


次に、レポート用にエクスポートされた惑星のリストにアイテムを追加しました。

テスト

Kentico Cloudプロジェクトを構成してコードを作成した後、新しいモジュールをテストする準備が整いました。まず、KenticoEMSのカスタムテーブルにエクスポートするデータをいくつか作成しました。

Kentico Kontent


次に、アプリケーションリストから新しいモジュールを開きました。

Kentico Kontent


[送信]ボタンをクリックしました。レコードが表示されていることを確認しました。

Kentico Kontent


次に、Kentico Cloudプロジェクトを開き、アイテムが作成されたことを確認しました。

Kentico Kontent


いずれかのアイテムを選択し、詳細が正しいことを確認しました。

Kentico Kontent
Kentico Kontent

今後の計画

この例では、新しいAPIを使用して基本的なコンテンツのアップロードを行う方法を示しました。まだまだあります! APIは、アセット、複数選択コンテンツタイプ、およびこのブログでは取り上げなかったその他の高度な機能をサポートします。将来的には、メディアライブラリファイルをアセットとしてKentico Cloudに直接アップロードするなど、いくつかの機能でこのコードを更新する予定です。

Kenticoクラウドチームは引き続きコンテンツ管理APIに取り組んでおり、ニーズに合わせてフィードバックを受け付けています。

前進する

新しいKenticoクラウドコンテンツ管理APIは、既存のコンテンツの移行を検討している開発者に多くの扉を開きます。この新機能を活用することで、既存のコンテンツをクラウドに移動し、KenticoCloudが提供するすべての優れた機能を活用できます。アプリケーションを構築し、アプリケーションをKentico Cloudに移動するときは、この新しいリソースを必ず確認してください。がんばろう!

コードを取得する

Headless CMSの導入をお考えでしょうか?

クラウドとマルチデバイスに最適化されたKentico Kontentをお試しください