API のキャッシュの有効化

アプリケーション・プログラミング・インターフェイス (API) を利用すると、さまざまな Web サービスからデータを取得することが可能になります。Fastly では、API をキャッシュして、サービス指向アーキテクチャのパフォーマンスを高速化することができます。トラフィックの急増に効率的に対応し、レイテンシを削減することで、API のパフォーマンスを最適化します。

次の例では、API キャッシングの仕組みについて説明します。掲載記事に対してユーザーがコメントできるオンラインマガジンを運営しているとします。記事1件に多数のコメントを付けられますが、各コメントは厳密に1人のユーザーにより作成されるものとします。

Webサイトのデータベースのリレーショナルスキーマ

Fastly は RESTful API の仕様を設計し、それらを利用して次のようにコメントを操作・取得します。

  • GET /comment - 全コメントのリストを返す
  • GET /comment/:id - 指定した ID のコメントを返す
  • POST /comment - 新規コメントを作成する
  • PUT /comment/:id - 指定した ID のコメントを更新する
  • DELETE /comment/:id - 指定した ID のコメントを削除する

作成、読み取り、更新、削除 (CRUD) メソッドでは、API による基本的な操作を実行できますが、データの関係を表すことはできません。これを行うには以下のような2つの関係エンドポイントを追加します。

  • GET /articles/:article_id/comments - 指定した記事のコメントのリストを取得する
  • GET /user/:user_id/comments - 指定したユーザーの全コメントを取得する

プログラマーはこれらのエンドポイントを利用して、記事の HTML ページをレンダリングしたり、ユーザーのプロフィールページにコメントを表示したりするために必要な情報を取得することができます。他にもさまざまなエンドポイントの構築が考えられますが、このガイドの目的にはこのセットで十分です。ここでは、ActiveRecord などのオブジェクト関係マッピング (ORM) を使用してデータベースと対話するように API がプログラムされていると仮定します。

キャッシュする API エンドポイントの決定

まず、キャッシュしたい URL を洗い出します。仕様のエンドポイントを2つのグループに分けることをお勧めします。

最初のグループは「アクセサ」と呼ばれ、コメントデータの取得やアクセスを行います。これらのエンドポイントは Fastly を利用してキャッシュできます。この例でのアクセサは、以下4つのエンドポイントになります。

  • GET /comment
  • GET /comment/:id
  • GET /article/:article_id/comments
  • GET /user/:user_id/comments

2つ目のグループは「ミューテータ」と呼ばれ、コメントデータを変更します。これらのエンドポイントは常に動的であるため、キャッシュできません。この例でのミューテータは、以下3つのエンドポイントになります。

  • POST /comment
  • PUT /comment/:id
  • DELETE /comment/:id

パターンが見えてきたはずです。この例の API は RESTful なので、GET エンドポイントはキャッシュでき、PUT、POST、および DELETE エンドポイントはキャッシュできないという単純なルールによって、アクセサのエンドポイントとミューテーターのエンドポイントを区別することができます。

このような情報を収集したら、次に PURGE リクエストを設定する API をプログラムします。

PURGE リクエストの設定

データが変更される場所を PUT、POST、および DELETE エンドポイントに指定したい気持ちに駆られるかもしれませんが、これはご遠慮ください。最近の API ではほとんどの場合、これらのエンドポイントはデータベースの変更処理を担う実際のモデルコードへのインターフェイスを表します。

この例では、実際のデータベース作業を ORM を使用して行うことを想定しています。ほとんどの ORM では、プログラマーが特定のアクションが実行されたときに起動する特別な「コールバック」をモデルに設定できます (例: 検証の前後または新規レコードの作成後)。

パージでは、モデルがデータベースに情報を保存したか、つまり、新規レコードを作成したか、既存レコードを更新したか、あるいはレコードを削除したかどうかに関心を払います。ここでは、Fastly にキャッシュ可能な各エンドポイントへの PURGE リクエストを送信するように API に指示をするコールバックを追加しています。

ActiveRecord のコメントモデルの場合は、次のように行います。

1
2
3
4
5
6
7
8
9
10
require 'fastly'
class Comment < ActiveRecord::Base
fastly = Fastly.new(api_key: 'FASTLY_API_TOKEN')
after_save do
fastly.purge "/comment"
fastly.purge "/comment/#{self.id}"
fastly.purge "/article/#{self.article_id}/comments"
fastly.purge "/user/#{self.user_id}/comments"
end
end

コールバックを作成する際は、次の2点に注意してください。

  • パージコードは、情報がデータベースに保存された「後に」トリガーされる必要があります。さもないと、データがデータベースに保存される前に Fastly がオリジンサーバーからデータをすることにより競合状態が発生する可能性があります。これにより、新しいデータではなく、古いデータがキャッシュされてしまいます。
  • これらの URL は、コメントが変更されると変化するコンテンツがあるため、パージされます。

モデルコードが完成したら、API がキャッシュされるようになります。

Fastly のセットアップ

API のキャッシュを有効にする最終ステップは、Fastly の設定です。次の作業が必要です。

また、お客様の API に限定した特定の要素の処理方法を Fastly に指示するためのルールをオプションで作成することができます。

注意

デフォルトでは、Fastly は PUT、POST、DELETE リクエストをキャッシュしません。

新しいサービスの作成

新規サービスを作成する手順に従ってください。Create a new service フィールドに入力する際に、API サーバーに関する以下の具体的な詳細を追加します。

  • Name フィールドに、API 情報のキャッシュに関連するサービスであることがわかるようなサービス名を入力します (例: My API Service)。
  • Domain フィールドに、API に関連付けられたドメイン名を入力します (例: api.example.com)。
  • Address フィールドに、API サーバーの IP アドレスやホスト名を入力します。

ドメインの追加

以下の手順に従って、Fastly サービスに API のドメイン名を追加します。

  1. Edit configuration をクリックし、アクティブなバージョンをクローンするオプションを選択します。
  2. Create domain をクリックします。

    Create a domain ページ

  3. 以下の要領で Create a domain フィールドに入力します。

    • Domain Name フィールドに、API のドメイン名を入力します。
    • Comment フィールドに、ドメインを説明するコメントをオプションで入力します。
  4. Create をクリックします。ドメインリストに API のドメイン名が表示されます。

オリジンサーバーの追加

ホストの操作手順に従ってください。Create a host フィールドに入力する際に、API サーバーに関する具体的な次の情報を追加します。

  • Name フィールドに、API 情報のキャッシュに関与するオリジンサーバーであることを判別しやすい名前を入力します。
  • Address フィールドに、API サーバーの IP アドレス (またはホスト名) を入力します。

翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。