メインコンテンツまでスキップ
提供版: β / RC

コンテンツカテゴリ毎にキャッシュがクリアされるリストのエンドポイントを作成する

概要

管理画面からコンテンツを更新すると、同じコンテンツ定義IDが設定されたTopicsのエンドポイントのキャッシュがクリアされます。 そのため、Topics::listのエンドポイントは、コンテンツが更新されるたびにキャッシュがクリアされ、常に最新のデータが取得される仕組みです。

しかし、キャッシュをそこまで頻繁にクリアする必要がない場合や、同一カテゴリ内でのみキャッシュをクリアしたい場合には、 API::api_request エンドポイントで Topics::list をラップする方法が有効です。これにより、コンテンツの更新時にキャッシュがクリアされなくなり、キャッシュのヒット率を高めることができます。 (ただし、この方法を採用する場合は、キャッシュの管理を独自に設計・設定する必要がある点に留意してください。)

たとえば、Topics::list を使用してカテゴリ(content_type)を指定している場合でも、コンテンツ定義IDが同じであれば、別のカテゴリのコンテンツ更新によってもキャッシュがクリアされてしまいます。

このチュートリアルでは、API::api_request エンドポイントで Topics::list をラップし、コンテンツカテゴリごとにキャッシュがクリアされる仕組みを持つリスト用エンドポイントの作成方法を解説します。

学べること

以下の手順で独自にキャッシュの制御を行うエンドポイントを作成します。

前提条件

  • Topics::listのエンドポイントが無い場合は事前に作成してください。
  • コンテンツカテゴリは1コンテンツに1つ設定する運用を想定します。

Topics::listをラップするエンドポイントを作成する

カスタム処理を作成する

まず、Topics::listをラップするためのカスタム処理を作成します。 [オペレーション] -> [カスタム処理] をクリックします。

Image from Gyazo

画面右上の [追加] ボタンをクリックします。

Image from Gyazo

カスタム処理編集画面で以下の設定を行います:

項目入力値
タイトルget_topics_list_by_category
識別子get_topics_list_by_category
処理以下の内容
{api_internal
endpoint='/rcms_api/1/topics/list/1'
method='GET'
query="contents_type[]=`$smarty.request.data_id`"
direct=true
var='response'
status_var='status'}

{assign var="data" value=$response}
注意

エンドポイントはご自身の環境で利用するTopics::listのエンドポイントを指定してください。

Image from Gyazo

Image from Gyazo

[追加する] ボタンをクリックしてカスタム処理を追加します。

エンドポイントを作成する

次に、作成したカスタム処理を呼び出すAPI::api_requestエンドポイントを作成します。

ご利用のエンドポイント一覧画面に遷移します。
ここでは、[API] -> [Default] をクリックします。

Image from Gyazo

[追加] をクリックします。

Image from Gyazo

エンドポイント設定ダイアログで以下を設定し、[追加する] をクリックして保存します。

項目設定内容
パスtopics/list/wrapper
カテゴリーAPI
モデルApi
オペレーションrequest_api
キャッシュ86400
nameカスタム処理の識別子(get_topics_list_by_category)
use_path_param有効にする

Image from Gyazo

動作確認

作成したエンドポイントの動作を確認します。 API一覧画面で [Swagger UI] をクリックします。

Image from Gyazo

作成した topics/list/wrapper エンドポイントを選択します。

Image from Gyazo

[Try it out] をクリックします。

Image from Gyazo

data_idに任意のカテゴリIDを入力し、[Execute] をクリックして実行します。

Image from Gyazo

レスポンスコードが200で正常に応答されること、また、2回目以降のリクエストに対してはレスポンスヘッダーの Age に値が設定されており、キャッシュが利用されていることを確認してください。

Image from Gyazo

キャッシュのクリアをするトリガーを設定する

カスタム処理を作成する

コンテンツ更新時に特定のURLのエンドポイントのみキャッシュクリアをするトリガー用のカスタム処理を作成します。
[オペレーション] -> [カスタム処理] をクリックします。

Image from Gyazo

画面右上の [追加] ボタンをクリックします。

Image from Gyazo

カスタム処理編集画面で以下の設定を行います:

項目入力値
タイトルclear_wrapped_endpont_cash
識別子clear_wrapped_endpont_cash
トリガー
  • モジュール:コンテンツ
  • トリガー:コンテンツの更新後
  • 対象:任意のコンテンツ定義
処理以下の内容
{assign_topics_detail var='topics_data' topics_id=$topics_id }
{purge_cdn_cache api_endpoint="/rcms-api/1/topics/list/wrapper/`$topics_data.contents_type`"}
注意

エンドポイントはご自身の環境で利用するTopics::listのエンドポイントを指定してください。

Image from Gyazo

Image from Gyazo

[追加する] ボタンをクリックしてカスタム処理を追加します。

動作確認

トリガーの動作を確認します。
対象のコンテンツ定義でコンテンツを更新します。

更新後、該当カテゴリのエンドポイントのキャッシュがクリアされていることを確認します。

Image from Gyazo

他のカテゴリのキャッシュは影響を受けていないことを確認します。

Image from Gyazo

以上で、Topics::list をラップし、コンテンツカテゴリごとにキャッシュがクリアされる仕組みを持つリスト用エンドポイントの作成は環境です。 本チュートリアルでは、コンテンツの更新時にのみキャッシュクリアを実行しています。コンテンツの追加時など、別のタイミングでもキャッシュをクリアしたい場合は、必要なトリガーを設定したカスタム処理を作成してください。

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。