2

ビジネス システムへの外部アクセスを可能にする RESTful API (MVC.NET を使用) を作成しています。API には検索リソースが含まれています。リソースの URI 形式は「/example/search/pages/1/?query=something」です。

例: ピザを検索するには、URI "/example/search/pages/1/?query=pizza" にアクセスすると、最初の 10 件の結果が得られます。結果の 2 ページ目を取得するには、「/example/search/pages/2/?query=something」などをリクエストします。

API Web アプリにサービスを提供するサーバーの負荷を大幅に削減する目的で、cache-control HTTP ヘッダーを使用して、API 上のすべてのリソースのパブリック キャッシュを有効にしました。

ただし、検索リソースに使用するキャッシュ ポリシーがわかりません。リソース (およびその URI) は検索対象によって異なるため、ページをキャッシュする意味はほとんどないようです。RESTful API でリソースを検索するために、どのキャッシング ポリシー (すなわち、キャッシュ制御 HTTP ヘッダーを介したキャッシング) を推奨していますか? キャッシングなし?有効期限が非常に短いプライベートキャッシング? 有効期限が短いパブリックキャッシング?

4

2 に答える 2

10

ほとんどのプロキシは、クエリ文字列を使用するものをキャッシュしません。

キャッシュが必要な場合は、POST-Redirect-GETパターンを使用して検索リクエストの新しいURIを作成することをお勧めします。

POST検索コンテンツタイプ:application / x-www-form-urlencoded

term=何か

303他の場所を参照してください:/ search / something / 1

これにより、より積極的にキャッシュが可能になりますが、これらのURIを作成する必要があり、それでも最初のPOSTの影響を受けます。とはいえ、問題のあるクエリであれば、これで問題はうまく解決されます。

于 2010-02-05T15:11:12.827 に答える
1

これには、適切な max-age を使用したパブリック キャッシングが必要です。max-age の値はアプリケーション固有であり、主観的な判断が必要です。

すべてのリクエストを計算する必要がないという報酬に対して、古いレスポンスを提供するリスクのバランスをとる必要があります。このリスクが非常に高い場合は、時間を短縮してください。ただし、これを行うと、オリジン サーバーの負荷が増加することに注意してください。最初の判断が正しいことを確認するために、使用パターンとサーバーの負荷を監視することをお勧めします。

これはあなたの質問の一部ではありませんでしたが、私があなただったら、ページネーションを URI のクエリ部分に移動します。

/example/search/pages/1/?query=何か

次のようになります。

/example/search?term=something&page=1

必須ではありませんが、開発者にとってより直感的になり、HTML フォームで簡単にヒットできます

于 2010-02-05T11:23:14.627 に答える