コンテンツカテゴリ毎にキャッシュがクリアされるリストのエンドポイントを作成する
概要
管理画面からコンテンツを更新すると、同じコンテンツ定義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をラップするためのカスタム処理を作成します。 [オペレーション] -> [カスタム処理] をクリックします。

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

カスタム処理編集画面で以下の設定を行います:
| 項目 | 入力値 | 
|---|---|
| タイトル | 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のエンドポイントを指定してください。


[追加する] ボタンをクリックしてカスタム処理を追加します。
エンドポイントを作成する
次に、作成したカスタム処理を呼び出すAPI::api_requestエンドポイントを作成します。
ご利用のエンドポイント一覧画面に遷移します。
ここでは、[API] -> [Default] をクリックします。

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

エンドポイント設定ダイアログで以下を設定し、[追加する] をクリックして保存します。
| 項目 | 設定内容 | 
|---|---|
| パス | topics/list/wrapper | 
| カテゴリー | API | 
| モデル | Api | 
| オペレーション | request_api | 
| キャッシュ | 86400 | 
| name | カスタム処理の識別子(get_topics_list_by_category) | 
| use_path_param | 有効にする | 

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

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

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

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

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

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

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

カスタム処理編集画面で以下の設定を行います:
| 項目 | 入力値 | 
|---|---|
| タイトル | 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のエンドポイントを指定してください。


[追加する] ボタンをクリックしてカスタム処理を追加します。
動作確認
トリガーの動作を確認します。
対象のコンテンツ定義でコンテンツを更新します。
更新後、該当カテゴリのエンドポイントのキャッシュがクリアされていることを確認します。

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

以上で、Topics::list をラップし、コンテンツカテゴリごとにキャッシュがクリアされる仕組みを持つリスト用エンドポイントの作成は環境です。 本チュートリアルでは、コンテンツの更新時にのみキャッシュクリアを実行しています。コンテンツの追加時など、別のタイミングでもキャッシュをクリアしたい場合は、必要なトリガーを設定したカスタム処理を作成してください。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。