開発者はすべてを自動化したいと考えています。コードを移動する場合でも、関数をテストする場合でも、マシンを奴隷にして汚い仕事をすることは、コンピューターに対する権限を行使し、コーディングの寿命を短縮するための最良の方法です。
注:「 AzureCognitiveSearchをKenticoKontentと統合する方法」で、このより完全で最新の例を作成しました。
この記事では、 KenticoKontentのWebhookサポートを使用してアプリケーションを合理化する方法の例を紹介します。
プログラミングに関して言えば、できる限り最適化することがすべてです。多分それはパフォーマンスの改善のためです。たぶんそれはあなたが6年前に何をしたかを理解できるようにするためです。動機に関係なく、機能を可能な限り最良の方法で実装する方法を常に考えておく必要があります。そしてそれが世界にウェブフックがある理由です。
これらのプログラマティックセンチネルを立ち上げることで、開発者はアーキテクチャの自動化を簡単に活用できます。 Kentico KontentのようなヘッドレスCMSの場合、この機能はさらに重要です。コンテンツは中央の場所で管理されるため、コンテンツがいつ変更されるかを知り、他のシステムを更新するのは少し難しい場合があります。 Kentico KontentのWebhookサポートにより、心配は終わりです。
私を信じないの?この機能を使用して、WebhookとKenticoKontentを使用してAzureSearchインデックスの更新を自動化する方法を紹介します。
Azure関数を作成する
プロセスの最初のステップは、新しいAzure関数を作成することでした。統合はWebhook-a-fiedになるため、技術的には、KenticoKontentが呼び出す新しい関数を自分のサイトに作成することができたはずです。しかし、その楽しみはどこにありますか?!?このジョブには、新しいAzure Generic WebhookFunctionを使用することを選択しました。
Azure Functionユーティリティで、新しい関数を作成しました。 C#とGenericWebhookフレーバーを選択しました。この関数は、KenticoKontentが投稿するHttpRequestMessageを受け入れるようにすでに配線されています。
これがデフォルトの関数コードで、 HttpRequestMessageを受け入れ、いくつかの基本的な検証を行います。
次に、私はKentico Kontent配達とAzureの検索NuGetパッケージを持ち込むにproject.jsonファイルを作成しました。
project.jsonファイルに変更を加えると、NuGetパッケージの復元が実行されます。
ハッシュジェネレーターを追加する
すべてのKenticoKontent通知には、ヘッダーにシステム生成のハッシュ署名が含まれています。これは、リクエストがKenticoKontentからのものであることを検証するのに役立ちます。 Azure関数で、通知を検証するためのハッシュを生成する新しい関数を作成しました。
JSON投稿を確認する
プロセスの次のステップは、リクエストを検証することでした。リクエストからX-KC-Signatureヘッダーを読み取りました。
次に、 HttpRequestMessage.Contentを読み込みます。
次に、 GenerateHash関数を呼び出して、リクエストを検証しました。 KenticoKontentインターフェースからWebHookSecret値を使用したことに注意してください。この値は、KenticoKontent内でWebhookが有効になっている場合に作成されます。今のところ、プレースホルダーとしてApplicationSetting値を使用しました。次に、生成されたハッシュをX-KC-Signatureヘッダー値と比較しました。
次に、HttpRequestMessageでJSONデータを読み込む必要がありました。既存の関数コードのいくつかを活用し、 JsonSerializerSettings値をいくつか追加しました。
次に、KenticoKontentでどのような操作が完了したかを確認しました。公開/非公開アクションのみを処理したかったので、アクションを決定するための呼び出しを作成しました。
次に、アイテムリストをループして、影響を受けるコンテンツアイテムを取得しました。
更新されたコンテンツアイテムのリストを取得したら、それらを処理する準備が整いました。
アイテムの詳細を取得する
更新されたコンテンツアイテムごとに、検索インデックスを更新するために詳細を取得する必要がありました。新しいUpdateIndex関数を作成し、 DeliveryClientを作成しました。
クライアント作成の一部としてPreviewAPIを指定していることに注意してください。 Webhookは公開イベントと非公開イベントに対して呼び出されるため、コンテンツアイテムの詳細を常に取得できる必要があります。
次に、Delivery APIを呼び出して、コンテンツアイテムのコード名を指定して詳細を取得しました。
呼び出しで結果が返された場合は、レコードの新しいAzure SearchIndexアクションを作成しました。公開されたアイテムの場合、これは検索インデックスを新しいデータで更新することを意味しました。未公開のアイテムの場合、これはインデックスからレコードを削除することを意味しました。
この機能は、リスト内のコンテンツアイテムごとに呼び出され、アイテムごとにAzure SearchIndexアクションが作成されるようにします。これらのアクションは、AzureSearchサービスに送信するアクションのリストに追加されました。
注意
このブログでは、更新されたアイテムごとに汎用オブジェクトタイプを使用しています。もう1つのオプションは、 Kentico Kontent Code Generatorプロジェクトを活用して、コンテンツアイテムタイプごとに厳密に型指定されたクラスを作成することです。 Azure関数を使用しているため、コードを最小化し、ジェネリック型を使用することにしました。実装によっては、コードジェネレーターを使用してその機能を利用することを検討する必要があります。
AzureSearchを更新する
次のステップは、アクションでAzureSearchインデックスを更新することでした。インデックス用に新しいSearchServiceClientとISearchIndexClientを作成しました。次に、SearchIndexActionsのリストをISearchIndexClientに渡しました。また、Azure Function内にいくつかのメッセージングを追加して、追加/更新または削除されたドキュメントの数を教えてくれました。
Webhookを有効にする
プロセスの最後のステップは、KenticoKontentに私の新しいWebhookについて伝えることでした。 Azure Functionで、関数のURLをコピーしました。
KenticoKontentの[プロジェクト設定]-> [Webhook]セクションで、コピーしたURLを使用して、AzureFunction用の新しいWebhookを追加しました。また、シークレット値をコピーして、Azureアプリケーション設定を更新しました。
テスト
すべての配管が整ったので、テストする準備ができました。まず、Azure Search Indexにクエリを実行して、イベントがインデックスの一部ではないことを確認しました。
次に、Kentico Kontentプロジェクトにアクセスして、新しいSpeakingEngagementを作成しました。
イベントを作成したら、それを公開してWebhookを実行しました。
Azure Functionで、Webhookが実行され、アイテムが更新されたことを確認しました。
次に、インデックスを照会して、コンテンツアイテムが追加されたことを確認しました。
次に、KenticoKontentでコンテンツアイテムを非公開にしました。
Azure Functionで、アイテムが処理されたことを確認しました。
最後に、Azure Search Indexにクエリを実行して、アイテムが削除されたことを確認しました。
これが私のライブサイトの検索に表示される公開されたイベントです。
前進する
ご覧のとおり、Kentico KontentのWebhookサポートは、プラットフォーム内で非常に役立つ機能です。この機能を活用することで、開発者は他のシステム内のコンテンツ更新プロセスを簡単に自動化できます。これにより、パフォーマンスが向上し、コードが少なくなり、アプリケーションがより合理化されます。 Kentico Kontent Webhookの完全なドキュメントをチェックして、プロジェクトで利用できる可能性を確認することをお勧めします。がんばろう!
Kentico Kontent Webhookの詳細については、こちらをご覧ください。
完全なAzure関数コードは次のとおりです。